2016-06-06 11 views
1

Ich denke, das ist eine einfache Frage, aber ich steckte darauf. Ich versuche, ein Set zu einem anderen zuweisen:Java Zuordnung der Schnittstelle

Set<Registrable> rr =kart.getReg(); 

wo kart.getReg() gibt Set Reg:

public class Kart { 
public Set<Reg> getReg() { 
    return reg; 
} 
... 

aber "Registrable" ist eine Schnittstelle, definiert wie:

public interface Registrable { 
    getters... 
    setters... 
} 

und schließlich die Klasse "Reg" ist:

public class Reg implements Registrable { 
    getters... 
    setters... 
} 

und mein Compiler schrieb:

Type mismatch: cannot convert from Set<Reg> to Set<Registrable> 

Jede Hilfe wird geschätzt!

Antwort

2

Mithilfe von Generics können Sie die Sicherheit der Kompilierungszeit für Collections erzwingen.

So können Sie nicht verwenden -

Set<Registrable> rr =kart.getReg();

Aber Sie können Platzhalter wie die folgenden.

Set<? extends Registrable> rr = kart.getReg(); 

Hinweis - Sie können keine Elemente zum Set rr hinzuzufügen.

Zum Beispiel -

rr.add(someItems); //will give you compile error. 

Wenn Sie wollen Elemente hinzufügen zum Set, können Sie die folgenden verwenden können.

Set<? super Reg> rr = kart.getReg(); 

Es kann Reg akzeptieren und es ist das Abendessen Klassen und Sie rr.add (someItems) ohne Kompilierung-Fehler verwenden können.