2016-11-21 11 views
3

Der folgende Code enthält einen Getter auf eine Menge von Objekten mit Klasse T:Return-Objekt typisiert mit generischen Klasse Typ

public class Cube <T extends State> { 

    private Set<T> states = new HashSet<>(); 

    public Set<T> getStates() { 
     return states; 
    } 

} 

Was mir die gültige Art und Weise schien der Satz von Zuständen zurückzukehren. Es gibt jedoch stattdessen eine Reihe von Objekten zurück. Der Versuch, zu verwenden:

Cube<DestinationState> cube = new Cube<>(); 
Set<DestinationState> set = cube.getStates(); 

Yields einen Compiler-Fehler in der zweiten Zeile:

Error:(187, 61) java: incompatible types: java.lang.Object cannot be converted to nl.gijspeters.pubint.graph.state.DestinationState 

Staat ist eine generische Schnittstelle mit mehreren Implementierungsklassen (unter denen DestinationState) und Subinterfaces.

Dies kann sehr wohl eine doppelte Frage sein (wie es scheint ziemlich einfach), aber ich war nicht in der Lage, die Antwort zu finden.

+4

ändern 'neue Cube so versuchen();' auf 'neue Cube <>();' –

+0

Typo in Frage, das ist der Fall im eigentlichen Code. Behoben. –

+0

Probieren Sie Ihren Code in meinem "Playground" -Projekt, keine Kompilierungsfehler, obwohl –

Antwort

1

ist standardmäßig T mit Object ersetzt, so ist diese Art Schlußfolgerung auf der Basis des Ziel diese

Set<DestinationState> set = cube<DestinationState>.getStates(); 
Verwandte Themen