17
Enums, Interfaces und Generics Philipp Güttler | 18.11.2008 | Progwerkstatt

Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

Enums, Interfaces und GenericsPhilipp Güttler | 18.11.2008 | Progwerkstatt

Page 2: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

| Enums, Interfaces und Generics | 17.11.2008Seite 2

Enum Typen – Definition

• komplexer Datentyp, der festen Menge von Konstanten enthält

• Information der Reihenfolge der Konstanten

• erbt implizit von java.lang.Enum

enum Tag {MONTAG, DIENSTAG, MITTWOCH, DONNERSTAG,

FREITAG, SAMSTAG, SONNTAG

}

Enums

Page 3: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

| Enums, Interfaces und Generics | 17.11.2008Seite 3

Standardmethoden

• Compiler fügt automatisch Methoden hinzu

int compareTo(Enum e)int ordinal()static Enum valueOf(String name)

Enums

Page 4: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

| Enums, Interfaces und Generics | 17.11.2008Seite 4

Eigene Funktionen

public enum Planet { EARTH (5.976e+24, 6.37814e6), MARS (6.421e+23, 3.3972e6);

private final double masse; // in kilograms private final double radius; // in meters Planet(double masse, double radius) { this.masse = masse; this.radius = radius; } double gravitationAufOberflaeche() { return G * masse / (radius * radius); } double gewichtAufOberflaeche(double otherMass) { return otherMass * surfaceGravity(); }}

Enums

Page 5: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

| Enums, Interfaces und Generics | 17.11.2008Seite 5

Interfaces – Definition

• formale Eckpunkte, die erfüllt werden müssen

• definiert, wie zwei Objekte miteinander kommunizieren

• definiert was implementiert werden soll, nicht wie

• Referenztyp wie Klasse

Interfaces

Page 6: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

| Enums, Interfaces und Generics | 17.11.2008Seite 6

Implementierung

public interface Vergleichbar extends Verwandt { public final double umrechnungsfaktor = 2d; public boolean istGroesser(Vergleichbar v); }

Interfaces

Page 7: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

| Enums, Interfaces und Generics | 17.11.2008Seite 7

Implementierung

public class Rechteck implements Berechenbar, Vergleichbar { ...

public boolean istGroesser(Vergleichbar v) { ... }}

Interfaces

Page 8: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

| Enums, Interfaces und Generics | 17.11.2008Seite 8

Implementierung

public class Rechteck implements Berechenbar, Vergleichbar { ...

public boolean istGroesser(Vergleichbar v) { ... }}

• Vorsicht Bei Änderungen in einem Interface müssen auch alle implementierenden Klassen geändert werden!

Interfaces

Page 9: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

| Enums, Interfaces und Generics | 17.11.2008Seite 9

Generics - Definition

• Typecast verhindern

• Typsicherheit beim Kompilieren überprüfen

• Typbegrenzung für allgemeine Datenstrukturen

Generics

Page 10: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

| Enums, Interfaces und Generics | 17.11.2008Seite 10

Generische Typen

public class Box {

private Object element;

public void add(Object e){ element = e; } public Object get() { return element; }}

Generics

1 public class BoxDemo {2 public static void main(String[] args){

...100 Box integerBox = new Box();

...250 integerBox.add("10");

...550 Integer someInteger = (Integer)integerBox.get();}

}

Page 11: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

| Enums, Interfaces und Generics | 17.11.2008Seite 11

Generische Typen

public class Box {

private Object element;

public void add(Object e){ element = e; } public Object get() { return element; }}

Generics

1 public class BoxDemo {2 public static void main(String[] args){

...100 Box integerBox = new Box();

...250 integerBox.add("10");

...550 Integer someInteger =

(Integer)integerBox.get();}

}

• java.lang.ClassCastException

Page 12: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

| Enums, Interfaces und Generics | 17.11.2008Seite 12

Generische Typen

public class Box<T> {

private T element;

public void add(T e){ element = e; } public T get() { return element; }}

Generics

1 public class BoxDemo {2 public static void main(String[] args){

...100 Box<Integer> integerBox = new Box<Integer>();

...250 integerBox.add("10");

...550 Integer someInteger = integerBox.get();}

}

Page 13: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

| Enums, Interfaces und Generics | 17.11.2008Seite 13

Generische Typen

public class Box<T> {

private T element;

public void add(T e){ element = e; } public T get() { return element; }}

Generics

1 public class BoxDemo {2 public static void main(String[] args){

...100 Box<Integer> integerBox = new Box<Integer>();

...250 integerBox.add("10");

...550 Integer someInteger = integerBox.get();}

}

• Compile Error

• Kein Typecast mehr

Page 14: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

| Enums, Interfaces und Generics | 17.11.2008Seite 14

Generische Methoden

public static <T> void fillBoxes(T arg, List<Box<T>> listOfBoxes){

for ( Box<T> box : boxlist) box.add(arg);}

Box.<Integer>fillBoxes(new Integer(10), listOfBoxes);Box.fillBoxes(new Integer(10), listOfBoxes);

Generics

Page 15: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

| Enums, Interfaces und Generics | 17.11.2008Seite 15

Generische Methoden

public static <T> void copy(List<T> dest, List<? extends T> src)

public static <T, S extends T> void copy(List<T> dest, List<S> src)

Generics

Page 16: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

| Enums, Interfaces und Generics | 17.11.2008Seite 16

Unterschiedliche Typparameter

• Mehrfache Typisierung– <A, B, C, ... >

• Wildcards

– Beliebiger Typ <?>– Upper Bounds <? extends X>– Lower Bounds <? super X>– <? extends X & Y>

Generics

Page 17: Enums, Interfaces und Generics - Universität Ulm · 2008-11-20 · Seite 2 | Enums, Interfaces und Generics | 17.11.2008 Enum Typen – Definition • komplexer Datentyp, der festen

| Enums, Interfaces und Generics | 17.11.2008Seite 17

Beispiel Typenhierarchie

• interface Rechteck extends GeoObjekt• Liste<Rechteck> recList, Liste<GeoObjekt> objList

• objList = recList; // Compiler Error• recList = objList; // Compiler Error