Überprüfen Sie, ob das Element die Instanz einer generischen Klasse ist

9
%Vor%

Ist dies der richtige Weg, um zu überprüfen, ob das Objekt eine Instanz der Klasse ist?

Ich habe einige Suchen durchgeführt und es scheint, dass dies für eine generische Klasse nicht funktioniert.

    
Ninjoe Quah 28.08.2012, 15:17
quelle

3 Antworten

5

Es ist unklar, was Sie hier testen wollen, aber hier sind ein paar Möglichkeiten:

  1. Ist item a T ? Ja. Ansonsten könnte es vermutlich nicht in die Methode isMember übergeben werden. Der Compiler würde es nicht zulassen. (Siehe Alex 'Einschränkung in den Kommentaren unten.)
  2. Ist item a Test ? Ihre isMember -Methode, wie sie geschrieben wurde, würde dies testen, aber ich achte hier auf einen Code-Geruch. Warum sollte ein T auch ein Test sein, aber nur ein Teil der Zeit? Vielleicht möchten Sie noch einmal überdenken, wie Sie Ihre Kurse organisieren. Wenn dies wirklich gewünscht ist, könnte Ihre Methode wie folgt geschrieben werden:

    %Vor%

    Was die Frage aufwirft: Warum eine solche Methode überhaupt? Was ist einfacher zu schreiben?

    %Vor%

    oder

    %Vor%

    Ich würde behaupten, dass der erste einfacher ist und die meisten Java-Entwickler verstehen, was es leichter bedeutet als eine benutzerdefinierte Methode.

  3. Ist item a Test<T> ? Es gibt keine Möglichkeit, dies zur Laufzeit zu wissen, da Java Generics mittels Löschen implementiert. Wenn dies das ist, was Sie wollen, müssen Sie die Methodensignatur wie Mike Myers 'Beispiel ändern.

StriplingWarrior 28.08.2012, 15:32
quelle
0

T ist keine Variable, sondern ein Platzhalter für eine Klasse, die zur Laufzeit definiert wird. Generics sind ein Kompilierzeit-Feature, deshalb fügen sie Checks zur Kompilierzeit hinzu, die zur Laufzeit keine Bedeutung haben. Wir können nur den Typ des referenzierten Objekts zur Laufzeit überprüfen, der im Code ein Super-Class-Typ sein könnte. Wenn wir den Typ T als Parameter an die Methode übergeben wollen, müssen wir uns nur wie folgt nähern:

%Vor%

oder

%Vor%

Beachten Sie, dass der Typ möglicherweise nicht derselbe ist wie hier, um zu sehen, wie man manipuliert:

%Vor%     
GingerHead 28.08.2012 15:28
quelle
0

Öffentliche Klasse LinkList {

%Vor%

}

Es tut mir leid, ich kann keine Frage als Antwort posten.

Die Klasse LinkList ist eine generische Klasse. Die Funktion besteht darin, zu prüfen, ob das Element zur Klasse gehört. überprüfe ob das gleiche T hat.

    
Ninjoe Quah 29.08.2012 15:33
quelle

Tags und Links