o/,
Misschien een beetje een vage topic titel, maar ik weet niet hoe ik het anders in een paar woorden uit moet leggen
. Ik heb een Module class:
waarvan ik in de inheriting class AndModule de getInputConnectors() method wil implementeren met een specifiekere return type, namelijk public List<InputConnector<Boolean>>:
Iets dat zou moeten werken, zou je zeggen, aangezien InputConnector<Boolean> een subset is van InputConnector<?>. Zonder de List<> generic eromheen werkt het dan ook prima, maar zodra de InputConnector dus een inner generic wordt, werkt het niet meer. De foutmelding:
Nu heb ik het werkbaar gekregen met de volgende code:
Maar
1) zo heeft de method specificatie van AndModule.getInputConnectors() niet aan dat er een lijst van Boolean InputConnectors wordt gereturned.
2) deze method implementatie komt een aantal keer voor (er zijn/komen ~30 module implementaties), en om nou 30 keer dit soort code te gebruiken
.
Heeft er iemand suggesties
?
Misschien een beetje een vage topic titel, maar ik weet niet hoe ik het anders in een paar woorden uit moet leggen
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| public abstract class Module { public final List<Connector> getConnectors() { List joinedList = new ArrayList<Connector>(); joinedList.addAll(this.getInputConnectors()); joinedList.addAll(this.getOutputConnectors()); return joinedList; } public abstract List<InputConnector<?>> getInputConnectors(); public abstract List<OutputConnector<?>> getOutputConnectors(); /** * @require getInputConnectors().contains(i) */ public abstract void inputUpdate(InputConnector<?> i); } |
waarvan ik in de inheriting class AndModule de getInputConnectors() method wil implementeren met een specifiekere return type, namelijk public List<InputConnector<Boolean>>:
Java:
1
2
3
4
5
6
7
8
9
10
| public class AndModule extends Module { protected List<InputConnector<Boolean>> inputConnectors; // cut public List<InputConnector<Boolean>> getInputConnectors() { return this.inputConnectors; } // cut } |
Iets dat zou moeten werken, zou je zeggen, aangezien InputConnector<Boolean> een subset is van InputConnector<?>. Zonder de List<> generic eromheen werkt het dan ook prima, maar zodra de InputConnector dus een inner generic wordt, werkt het niet meer. De foutmelding:
code:
1
2
3
| getInputConnectors() in homecontrol.modules.stdlogic.AndModule cannot override getInputConnectors() in homecontrol.core.Module; attempting to use incompatible return type found : java.util.List<homecontrol.core.InputConnector<java.lang.Boolean>> required: java.util.List<homecontrol.core.InputConnector<?>> |
Nu heb ik het werkbaar gekregen met de volgende code:
Java:
1
2
3
4
| @SuppressWarnings("unchecked") public List<InputConnector<?>> getInputConnectors() { return (List)(this.inputConnectors); } |
Maar
1) zo heeft de method specificatie van AndModule.getInputConnectors() niet aan dat er een lijst van Boolean InputConnectors wordt gereturned.
2) deze method implementatie komt een aantal keer voor (er zijn/komen ~30 module implementaties), en om nou 30 keer dit soort code te gebruiken
Heeft er iemand suggesties