Het is alweer even geleden dat ik met Java bezig was (en generics in het bijzonder), en kom nu niet meer uit het volgende vraagstuk. Googlen levert me niets op, wellicht dat enkelen onder u mij kunnen helpen 
Ik heb deze interface gedefiniëerd:
Nu dacht ik dat ik die zo zou moeten kunnen implementeren:
[code=java]
class Blabla implements FeatureMap {
/* ..... */
private Map<Date, List<Integer>> features = new TreeMap<>();
@Override
public Map<Date, List<Integer>> getFeatures() {
return features;
}
}[/code=java]
maar dat werkt niet, ik krijg de melding dat de return type van de implementerende methode niet compatibel is met die van de interface-specificatie. Het werkt ook niet als ik in de method signature van de implementatie het return type verander naar Map<Date, List<? extends Number>>, want dan is het type van features niet juist.
Alvast hartelijk dank!
Edit: hmm, de wildcard-implementatie werkt niet, maar als ik de interface verander naar:
werkt het wel (zonder verandering aan de implementerende klasse zoals hierboven). Ik dacht echter dat wildcards (dus de '?'-syntax) precies voor dit doel waren, en generics niet. Ergo: ik snap er nog steeds niks van
Kan iemand me het precieze verschil uitleggen misschien?
Ik heb deze interface gedefiniëerd:
Java:
1
2
3
4
| public interface FeatureMap { /* ..... */ public Map<Date, List<? extends Number>> getFeatures(); } |
Nu dacht ik dat ik die zo zou moeten kunnen implementeren:
[code=java]
class Blabla implements FeatureMap {
/* ..... */
private Map<Date, List<Integer>> features = new TreeMap<>();
@Override
public Map<Date, List<Integer>> getFeatures() {
return features;
}
}[/code=java]
maar dat werkt niet, ik krijg de melding dat de return type van de implementerende methode niet compatibel is met die van de interface-specificatie. Het werkt ook niet als ik in de method signature van de implementatie het return type verander naar Map<Date, List<? extends Number>>, want dan is het type van features niet juist.
Alvast hartelijk dank!
Edit: hmm, de wildcard-implementatie werkt niet, maar als ik de interface verander naar:
Java:
1
2
3
4
| public interface FeatureMap { /* ..... */ public <T extends Number> Map<Date, List<T>> getFeatures(); } |
werkt het wel (zonder verandering aan de implementerende klasse zoals hierboven). Ik dacht echter dat wildcards (dus de '?'-syntax) precies voor dit doel waren, en generics niet. Ergo: ik snap er nog steeds niks van
[ Voor 19% gewijzigd door Eelke Spaak op 31-07-2012 13:54 ]