De laatste dagen heb ik mij verdiept in de "nieuwe" java versie 1.5.0. Nu zou ik graag generics toepassen op mijn huidig project omdat die goed van pas zou komen!
Situatie:
classe DataMap: hierin worden mappins van colummen bijgehouden, maar die is nu niet relevant. Het belangrijkste is dat er een referentie wordt bijgehouden van welke klasse hij de datamap bijhoudt!
Nu als ik deze code wil gebruiken compiled hij niet (wegens generics probleem dus)
Normaal zou er door methode getInstanceOfDomain een T moeten worden teruggeven, in mijn geval dus "customer". Maar hij geeft volgens de compiler een "object " terug.
Als ik de methode intern oproep (in de klasse datamap) dan geeft hij WEL T terug.
Ow ja: volgende code zou toch ook moeten werken? Ze is beetje korter
Dus zonder de <Customer>.
dit is een quote van de java generics tutorial.
Dus ik dacht dat ik ook gelde voor constructors en niet alleen methods
Situatie:
classe DataMap: hierin worden mappins van colummen bijgehouden, maar die is nu niet relevant. Het belangrijkste is dat er een referentie wordt bijgehouden van welke klasse hij de datamap bijhoudt!
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| public class DataMap<T>{ private Class<T> domainClass; private String tableName; private List columnMaps = new ArrayList(); public DataMap(Class<T> domainClass, String tableName) { this.domainClass = domainClass; this.tableName = tableName; } public void setDomainClass(Class<T> domainClass) { this.domainClass = domainClass; } public void setTableName(String tableName) { this.tableName = tableName; } public T getInstanceOfDomain(){ try { return domainClass.newInstance(); } catch (InstantiationException e) { } catch (IllegalAccessException e) { } return null; } public Class<T> getDomainClass() { return domainClass; } } |
Nu als ik deze code wil gebruiken compiled hij niet (wegens generics probleem dus)
Java:
1
2
| DataMap d = new DataMap<Customer>(Customer.class,"customer"); Customer c = d.getInstanceOfDomain(); |
Normaal zou er door methode getInstanceOfDomain een T moeten worden teruggeven, in mijn geval dus "customer". Maar hij geeft volgens de compiler een "object " terug.
Als ik de methode intern oproep (in de klasse datamap) dan geeft hij WEL T terug.
Ow ja: volgende code zou toch ook moeten werken? Ze is beetje korter
Java:
1
| DataMap d = new DataMap(Customer.class,"customer"); |
Dus zonder de <Customer>.
dit is een quote van de java generics tutorial.
Notice that we don’t have to pass an actual type argument to a generic method. The
compiler infers the type argument for us, based on the types of the actual arguments. It
will generally infer the most specific type argument that will make the call type-correct.
Dus ik dacht dat ik ook gelde voor constructors en niet alleen methods