1 | package eu.hsrw.tr.prog.vl.generics; |
---|
2 | |
---|
3 | public class BoxMain { |
---|
4 | |
---|
5 | public static void main(String[] args) { |
---|
6 | Box b = new Box(); |
---|
7 | |
---|
8 | b.set("Hallo"); |
---|
9 | String s = (String) b.get(); |
---|
10 | System.out.println(s); |
---|
11 | /**/ |
---|
12 | b.set(42); |
---|
13 | int x = (Integer) b.get(); |
---|
14 | System.out.println(x); |
---|
15 | /**/ |
---|
16 | Regal r = new Regal(); |
---|
17 | r.leftBox = new Box("hallo"); |
---|
18 | r.rightBox = new Box(42); |
---|
19 | // Wir müssen wissen, welcher Typ in welcher Box des Regals liegt. |
---|
20 | s = (String) r.leftBox.get(); |
---|
21 | x = (Integer) r.rightBox.get(); |
---|
22 | |
---|
23 | /**/ |
---|
24 | StringBox sb = new StringBox(); |
---|
25 | sb.set("Hallo StringBox"); |
---|
26 | System.out.println(sb.get()); |
---|
27 | /**/ |
---|
28 | IntBox ib = new IntBox(); |
---|
29 | // Warum funktioniert das Folgende? |
---|
30 | // Es wird die überladene Methode set() aus Box aufgerufen |
---|
31 | // --> unerwünschtes Verhalten, da der falsche Typ gespeichert werden |
---|
32 | // kann |
---|
33 | ib.set("Hallo IntBox"); |
---|
34 | // Jetzt wird die Methode set() aus IntBox aufgerufen |
---|
35 | ib.set(42); |
---|
36 | // Die Ausgabe funktioniert, da die Methode Box.get() Object liefert und die |
---|
37 | // toString()-Methode den korrekten Integer-Wert ausgibt (Autoboxing). |
---|
38 | System.out.println(ib.get()); |
---|
39 | // Das funktioniert nicht mehr, weil die Typen nicht kompatibel sind |
---|
40 | // (Object und int) |
---|
41 | @SuppressWarnings("unused") |
---|
42 | int y = 10; |
---|
43 | // |
---|
44 | // Funktioniert nicht: int z = ib.get() + y; |
---|
45 | // |
---|
46 | /**/ |
---|
47 | } |
---|
48 | } |
---|