Hallo habe folgendes Problem:
Ich möchte über Generics festlegen, dass "Gefangene der Stufe B" nicht mit "Gefangene der Stufe A" in eine gemeinsame Zelle gesperrt werden können, bzw. ich in eine Liste A auch nur wirklich Objecte vom Typem A ablegen kann.
Allerdings ist mir nicht ganz klar, wo ich die Listen zum anlegen der Zellenbewohner anlegen muss.
Ich denke durch Typ Löschung wird aufgrund der Vererbung kein Unterschied mehr zwischen A und B gemacht.
Mir ist nicht ganz klar wo der fehler liegt.
Ich möchte über Generics festlegen, dass "Gefangene der Stufe B" nicht mit "Gefangene der Stufe A" in eine gemeinsame Zelle gesperrt werden können, bzw. ich in eine Liste A auch nur wirklich Objecte vom Typem A ablegen kann.
Allerdings ist mir nicht ganz klar, wo ich die Listen zum anlegen der Zellenbewohner anlegen muss.
Ich denke durch Typ Löschung wird aufgrund der Vererbung kein Unterschied mehr zwischen A und B gemacht.
Mir ist nicht ganz klar wo der fehler liegt.
Java:
public interface IZelle<T extends IGefangener> {
boolean einsperren(IGefangener g);
boolean rauslassen(IGefangener g);
}
public class Zelle<T extends IGefangener> implements IZelle {
Set<T> myList;
public Zelle(){
myList = new HashSet<>();
}
@Override
public boolean einsperren(IGefangener g) {
if (!myList.contains(g)){
myList.add((T) g); //Falsch
return true;
}else{
return false;
}
}
@Override
public boolean rauslassen(IGefangener g) {
if (myList.contains(g)){
myList.remove(g);
return true;
}else{
return false;
}
}
}
public interface IGefangener {
String getName();
}
public class Gefangener implements IGefangener{
String name;
public Gefangener(String name) {
this.name = name;
}
@Override
public String getName() {
// TODO Automatisch generierter Methodenstub
return null;
}
}
public class GefangenerStufeB extends Gefangener{
public GefangenerStufeB(String name) {
super(name);
// TODO Automatisch generierter Konstruktorstub
}
}
public class GefangenerStufeA extends Gefangener{
public GefangenerStufeA(String name) {
super(name);
// TODO Automatisch generierter Konstruktorstub
}
}
public class Main {
public static void main(String[] args) {
GefangenerStufeA gA = new GefangenerStufeA("Bernd");
GefangenerStufeB gB = new GefangenerStufeB("Klaus");
Zelle zFuerA<GefangenerStufeA> = new Zelle();
boolean a = zFuerA.einsperren(gA);
boolean b = zFuerA.einsperren(gB);
System.out.println(a + " " + b);
}
}
Zuletzt bearbeitet: