Changeset 192 in Java_Quellcode_SOOP_Vorlesung
- Timestamp:
- Jan 18, 2016, 10:16:26 AM (9 years ago)
- Location:
- generics
- Files:
-
- 1 added
- 1 deleted
- 2 edited
- 2 copied
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
generics/Box.java
r188 r192 1 1 package eu.hsrw.tr.prog.vl.generics; 2 2 3 public class ObjectBox {3 public class Box { 4 4 5 5 private Object value; 6 6 7 public Object getValue() { 7 public Box() {} 8 9 public Box(Object value) { 10 this.value = value; 11 } 12 13 public Object get() { 8 14 return this.value; 9 15 } 10 16 11 public void set Value(Object value) {17 public void set(Object value) { 12 18 this.value = value; 13 19 } -
generics/BoxMain.java
r188 r192 1 1 package eu.hsrw.tr.prog.vl.generics; 2 2 3 public class ObjectBoxMain {3 public class BoxMain { 4 4 5 5 public static void main(String[] args) { 6 ObjectBox b = new ObjectBox(); 7 8 b.setValue("Hallo"); 9 10 String s = (String) b.getValue(); 11 6 Box b = new Box(); 7 8 b.set("Hallo"); 9 String s = (String) b.get(); 12 10 System.out.println(s); 13 14 b.setValue(42);15 16 int x = (Integer) b.getValue();17 11 12 b.set(42); 13 int x = (Integer) b.get(); 18 14 System.out.println(x); 19 15 20 ObjectBoxSub obs = new ObjectBoxSub(); 21 22 obs.setValue("Java"); 23 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 24 23 StringBox sb = new StringBox(); 25 26 sb.setValue("Hallo SB"); 27 28 System.out.println(sb.getValue()); 24 sb.set("Hallo StringBox"); 25 System.out.println(sb.get()); 26 27 IntBox ib = new IntBox(); 28 // Warum funktioniert das? 29 // Es wird die überladene Methode set() aus Box aufgerufen 30 // --> unerwünschtes Verhalten, da der falsche Typ gespeichert werden 31 // kann 32 ib.set("Hallo IntBox"); 33 // Jetzt wird die Methode set() aus IntBox aufgerufen 34 ib.set(42); 35 // Die Ausgabe funktioniert, da die Methode Box.get() Object liefert und die 36 // toString()-Methode den korrekten int-Wert ausgibt (Autoboxing). 37 System.out.println(ib.get()); 38 // Das funktioniert nicht mehr, weil die Typen nicht kompatibel sind 39 // (Object und int) 40 int y = 10; 41 /* 42 * Funktioniert nicht: int z = ib.get() + y; 43 */ 29 44 } 30 45 } -
generics/GenericBox.java
r188 r192 1 1 package eu.hsrw.tr.prog.vl.generics; 2 2 3 public class Box<T> {3 public class GenericBox<T> { 4 4 5 5 private T value; 6 6 7 public void set Value(T value) {7 public void set(T value) { 8 8 this.value = value; 9 9 } 10 10 11 public T get Value() {11 public T get() { 12 12 return this.value; 13 13 } -
generics/GenericBoxMain.java
r188 r192 1 1 package eu.hsrw.tr.prog.vl.generics; 2 2 3 public class BoxMain {3 public class GenericBoxMain { 4 4 5 5 public static void main(String[] args) { 6 Box<Integer> b = newBox<Integer>();6 GenericBox<Integer> b = new GenericBox<Integer>(); 7 7 8 b.set Value(2);8 b.set(2); 9 9 10 10 Integer i = 3; … … 12 12 int x = i; 13 13 14 b.set Value(x);14 b.set(x); 15 15 16 16 System.out.println(b); -
generics/IntBox.java
r188 r192 1 1 package eu.hsrw.tr.prog.vl.generics; 2 2 3 public class IntBox extends ObjectBox { 4 public int getiValue() { 5 return ((Integer) getValue()).intValue(); 3 public class IntBox extends Box { 4 5 // Hier funktioniert der Rückgabetyp int NICHT, weil int KEINE Unterklasse 6 // von Object ist. In der Oberklasse hat get() den Rückgabetyp Object. Daher 7 // muss die Methode zum Auslesen des Boxinhalts einen anderen Namen 8 // erhalten. Wir wählen getInt(), jeder andere Name ist auch möglich. 9 /* Funktioniert nicht: 10 public int get() { 11 return ((Integer) super.get()).intValue(); 12 } 13 */ 14 public int getInt() { 15 return ((Integer) super.get()).intValue(); 6 16 } 7 17 8 public void set Value(int i) {9 super.set Value(new Integer(i));18 public void set(int i) { 19 super.set(new Integer(i)); 10 20 } 11 21 } -
generics/StringBox.java
r188 r192 1 1 package eu.hsrw.tr.prog.vl.generics; 2 2 3 public class StringBox extends ObjectBox { 4 public String getValue() { 5 return (String) (super.getValue()); 3 public class StringBox extends Box { 4 5 // Hier funktioniert der Rückgabetyp String, weil String eine Unterklasse 6 // von Object ist. In der Oberklasse hat get() den Rückgabetyp Object. 7 public String get() { 8 return (String) (super.get()); 6 9 } 7 8 public void set Value(String s) {9 super.set Value(s);10 11 public void set(String s) { 12 super.set(s); 10 13 } 11 14 }
Note: See TracChangeset
for help on using the changeset viewer.