Hey,
Zou iemand me kunnen helpen met een probleem dat ik al meermaals ben tegengekomen?
Het probleem gaat als volgt:
Stel dat meerdere subklassen overerven van een bepaalde superklasse. In een andere klasse wil ik nu een operatie definiëren die iets anders doet afhankelijk van de subklasse.
Een voorbeeld scenario:

Dit geeft als resultaat 2 keer null. Terwijl ik als resultaat "subA", "subB" zou willen krijgen. Ik weet dat dit zou kunnen door de printenMaar methode in de subklassen te definiëren en zo met overriding te werken maar dat is hier niet echt de bedoeling. Het is niet mijn bedoeling dat de subklassen weet hebben van de operatie.
De enige oplossingen die ik hiervoor heb kunnen bedenken zijn:
of
Je kan java als taal meegeven aan de [code=java]-tag
Waarbij de tweede oplossing die met enumeraties werkt in feite een verdoken instanceof is.
Dit zijn natuurlijk geen mooie oplossingen.
Zijn er hiervoor alternatieven waar ik niet aan gedacht heb?
Alvast bedankt,
Bekos
Zou iemand me kunnen helpen met een probleem dat ik al meermaals ben tegengekomen?
Het probleem gaat als volgt:
Stel dat meerdere subklassen overerven van een bepaalde superklasse. In een andere klasse wil ik nu een operatie definiëren die iets anders doet afhankelijk van de subklasse.
Een voorbeeld scenario:

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
| public class Main { public static void main(String[] args) { SuperK sup1 = new SubA(); SuperK sup2 = new SubB(); String str= null; str = printenMaar(sup1); System.out.println(str); str = printenMaar(sup2); System.out.println(str); } private static String printenMaar(SuperK sup1) { //Not used (overloading) return null; } private static String printenMaar(SubA sup1) { return "subA"; } private static String printenMaar(SubB sup1) { return "subB"; } } |
Dit geeft als resultaat 2 keer null. Terwijl ik als resultaat "subA", "subB" zou willen krijgen. Ik weet dat dit zou kunnen door de printenMaar methode in de subklassen te definiëren en zo met overriding te werken maar dat is hier niet echt de bedoeling. Het is niet mijn bedoeling dat de subklassen weet hebben van de operatie.
De enige oplossingen die ik hiervoor heb kunnen bedenken zijn:
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
| public class Main { public static void main(String[] args) { SuperK sup1 = new SubA(); SuperK sup2 = new SubB(); String str= null; str = printenMaar(sup1); System.out.println(str); str = printenMaar(sup2); System.out.println(str); } private static String printenMaar(SuperK sup1) { if (sup1 instanceof SubA) return "SubA"; else if (sup1 instanceof SubB) return "SubB"; return null; } } |
of
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
| public class Main { public static void main(String[] args) { SuperK sup1 = new SubA(); SuperK sup2 = new SubB(); String str= null; str = printenMaar(sup1); System.out.println(str); str = printenMaar(sup2); System.out.println(str); } private static String printenMaar(SuperK sup1) { if (sup1.getType() == SubclassTypes.SubA) return "SubA"; else if (sup1.getType() == SubclassTypes.SubB) return "SubB"; return null; } } |
Je kan java als taal meegeven aan de [code=java]-tag
Waarbij de tweede oplossing die met enumeraties werkt in feite een verdoken instanceof is.
Dit zijn natuurlijk geen mooie oplossingen.
Zijn er hiervoor alternatieven waar ik niet aan gedacht heb?
Alvast bedankt,
Bekos
[ Voor 1% gewijzigd door BtM909 op 29-03-2012 14:56 ]