package ch.fhnw.oop2.testPrep.generics;
// +-----------------
// | Kleidungstueck +-----+
// +--------------------- |
// | |
// | |
// +-----v----+ +---v---+
// | Oberteil | | Schuh |
// +----------+ +-------+
// | | |
// | | |
// +-------v--+ +v--------+ +------v-------+
// | Pullover | | Jacke | | Arbeitsschuh |
// +----------+ +---------+ +--------------+
//
public class Generics {
public static void main(String[] args) {
Schrank<Oberteil> schrank = new Schrank<>();
schrank.add(new Pullover());
//Pullover p = schrank.getElement();
// doesn't work: Es ist unklar ob das Element wirklich ein Pullover ist
Schrank<Pullover> schrank1 = new Schrank<>();
schrank1.add(new Pullover());
Kleidungsstueck p1 = schrank1.getElement();
// Funktioniert
//Schrank<Schuh> schrank2 = new Schrank<Arbeitsschuh>();
// doesn't work: incompatible types
Schrank<?> schrank3 = new Schrank<Object>();
//schrank3.add(new Kleidungsstueck());
Object p3 = schrank3.getElement();
// doesn't work: Referenz kann ein Schrank von irgendeinem Typ (Object, List, alles) sein,
// deswegen kann kein spezifisches Element hinzugefügt werden.
Schrank<? extends Oberteil> schrank4 = new Schrank<Pullover>();
//schrank4.add(new Pullover());
Oberteil p = schrank4.getElement();
// doesn't work: Es ist unklar vom welchem Typ der Schrank ist.
// Es könnte eine Jacke, Pullover oder ein Oberteil sein.
// Deswegen muss man das Hinzufügen verbieten
Schrank<? super Oberteil> schrank5 = new Schrank<Kleidungsstueck>();
schrank5.add(new Oberteil());
schrank5.add(new Pullover());
//Pullover p5 = schrank5.getElement();
// doesn't work: es ist unklar, was zurück kommt
//schrank5.add(new Kleidungsstueck());
// doesn't work: es ist unklar welcher Supertyp ich will: Object? Kleidungsstueck?
}
}