Überprüfen ob übergebenes Objekt zu Generics passt

CptK

Bekanntes Mitglied
Hallo, ich habe folgende Struktur:

Java:
interface Label { String getName(); }

class LabelA extends Label {
    String getName() { return "LabelA"; }
}

class LabelB extends Label {
    String getName() { return "LabelB"; }
}

interface Parser { String getLabelName(); }

class ParserA {
    String getLabelName() { return "LabelA"; }
}

class ParserB {
    String getLabelName() { return "LabelB"; }
}

class X<L extends Label> {
    public X(Parser parser) {
        // Hier das Problem:
        if(parser.getLabelName() != L.getName())
            throw new ....
    }
}

Wie kann ich überprüfen, dass der übergebene Parser zu dem Label in den Generics passt? Also dass das hier durchgeht:
Java:
new X<LabelA>(new ParserA());
Folgende Sachen aber einen Fehler wefen:
Java:
new X<LabelB>(new ParserA());

new X<LabelA>(new ParserB());
 

Robert Zenz

Top Contributor
Generics sind zur Laufzeit quasi nicht existent, die Information wird primaer nur beim kompilieren verwendet, bedeutet du kannst nicht direkt auf diese Informationen zugreifen.

Der Weg den mann in diesem Fall fuer gewoehnlich geht, ist es die Klasse zu uebergeben welche erlaubt oder erwartet ist.

Java:
public class X<L extends Label> {
    public X(Parser parser, Class<L> expectedLabelClass) {
        if(!parser.getLabelName().equals(expectedLabelClass.getSimpleName())) {
        }
    }
}

new X<LabelB>(new ParserB(), LabelB.class);

Was aber eine bessere Strukturierung waere, ist wenn du den Parser testen laesst ob dieser eine bestimmte Label-Klasse annehmen kann:

Java:
public interface Parser {
    public boolean accepts(Class<? extends Label> labelClass);
}

public class X<L extends Label> {
    public X(Parser parser, Class<L> expectedLabelClass) {
        if(!parser.accepts(expectedLabelClass)) {
        }
    }
}

new X<LabelB>(new ParserB(), LabelB.class);

Damit kann der Parser sehr einfach entscheiden ob er diese Klasse akzeptiert oder nicht.

Als Anmerkung: Erstens, Strings mit "==" zu vergleichen bedeutet du vergleichst die Referenz, also ob es sich um das selbe Objekt handelt. String-Konstanten sind zufaellig zur Laufzeit immer die selbe Instanz. Du willst Strings immer mit "equals" vergleichen (z.B. auch ueber Objects.equals() als Hilfe). Beispiel:

Java:
"ABC" == "ABC" // true

"ABC" == new String("ABC") // false

String value = "ABC";
value == "ABC" // true

new String("ABC") == "ABC" // false

new String("ABC").intern() == "ABC" // true

".intern()" in dem Fall retourniert die Instanz von diesem String aus dem globalen String-Cache, welcher dann wieder die selbe ist wie die Konstante.

Zweitens, wenn moeglich verwende immer Class-Instanzen und Referenzen anstelle von Strings. Das ist nicht immer moeglich (Klassen nicht bekannt zur Kompilierzeit und so weiter), aber wenn, ist es besser als Strings herum zu schieben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Überprüfen ob eine Schreibberechtigung auf ein file exisitert bzw. ob man dieses file löschen kann, wie? Java Basics - Anfänger-Themen 9
J Überprüfen ob ein Fenster offen ist? Java Basics - Anfänger-Themen 8
Naxon89 Threads Android AysncTask => Überprüfen, ob ein Ergebniss schon vorliegt Java Basics - Anfänger-Themen 5
H Überprüfen ob String Array leer ist Java Basics - Anfänger-Themen 4
C Überprüfen eines Programms auf Syntaxfehler Java Basics - Anfänger-Themen 3
G Überprüfen ob alle Ziffern von 1-9 in einem Integer vorhanden sind Java Basics - Anfänger-Themen 6
A Überprüfen, ober eine Zahl Ziffer enthält Java Basics - Anfänger-Themen 12
C Überprüfen eines Queltextes auf Syntax-Fehler und Laufzeitfehler Java Basics - Anfänger-Themen 2
K Überprüfen ob Eingabe ein Float ist Java Basics - Anfänger-Themen 4
P Überprüfen ob Mausklick auf Linie ist? Java Basics - Anfänger-Themen 6
J Überprüfen, ob eine 2D Matrix ein Baum ist Java Basics - Anfänger-Themen 5
J Methoden Überprüfen ob Objekt bereits erstellt wurde Java Basics - Anfänger-Themen 2
J Überprüfen ob String eine Zahl ist Java Basics - Anfänger-Themen 2
T Überprüfen, ob Objekt gelöscht wurde Java Basics - Anfänger-Themen 1
G String Elemente auf Zahlen Überprüfen Java Basics - Anfänger-Themen 21
O Überprüfen ob eine Methode ausgeführt wurde Java Basics - Anfänger-Themen 10
C Überprüfen auf Palindrom Java Basics - Anfänger-Themen 12
B Überprüfen von Strings schlägt fehl Java Basics - Anfänger-Themen 5
S Arbeiten mit einer CSV Datei und Überprüfen von einem Datum in einem Textfeldern Java Basics - Anfänger-Themen 4
C Überprüfen, ob Timer läuft Java Basics - Anfänger-Themen 3
C Problem mit Überprüfen einer Eingabe Java Basics - Anfänger-Themen 5
S Überprüfen auf Permutation Java Basics - Anfänger-Themen 4
K Überprüfen ob Datei vorhanden Java Basics - Anfänger-Themen 2
G Überprüfen ob einen Array einen Value enthält Java Basics - Anfänger-Themen 13
P Überprüfen, ob String Zeichenfolge enthält Java Basics - Anfänger-Themen 4
T Überprüfen, ob Array Elemente hat Java Basics - Anfänger-Themen 22
I Überprüfen eines Passwortes Java Basics - Anfänger-Themen 5
J Überprüfen ob Leerzeile im String[][] array Java Basics - Anfänger-Themen 2
N Überprüfen ob ein Label angeklickt wurde Java Basics - Anfänger-Themen 3
P Methode zum Überprüfen ob Datei verwendet wird? Java Basics - Anfänger-Themen 3
G Überprüfen wann ein Dokument abläuft? Java Basics - Anfänger-Themen 3
C Überprüfen, ob die eingabe auch buchstaben enthält Java Basics - Anfänger-Themen 6
G Überprüfen ob es ein Link existiert Java Basics - Anfänger-Themen 3
S Überprüfen, ob Tabelle existiert Java Basics - Anfänger-Themen 5
M Überprüfen ob die eingaben in einem JTextField eine Zahl ist Java Basics - Anfänger-Themen 5
H Überprüfen ob Request mit enctype=multipart/form-data Java Basics - Anfänger-Themen 2
U Erste Schritte Server will nicht übergebenes Objekt speichern Java Basics - Anfänger-Themen 5
K auf übergebenes Objekt zugreifen Java Basics - Anfänger-Themen 5
X übergebenes Argument als Ziel Java Basics - Anfänger-Themen 7
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
Rxiiz Objekt aus ComboBox entfernen Java Basics - Anfänger-Themen 4
I JSON in Objekt umwandeln Java Basics - Anfänger-Themen 3
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
B Objekt aus generalisierter Liste entfernen Java Basics - Anfänger-Themen 11
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
Say Objekt Java Basics - Anfänger-Themen 4
Say abstract class und Objekt erzeugen - Dringend Hilfe Java Basics - Anfänger-Themen 10
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
K wie kann ich alle Attribute von dem Objekt(pagode) ausgeben lassen ? Java Basics - Anfänger-Themen 3
H Ein übergegebenes Objekt auf null setzen Java Basics - Anfänger-Themen 9
M BlueJ Objekt in Objektliste Java Basics - Anfänger-Themen 2
B Objekt in Klassendiagramm an fremdes Objekt weiterreichen? Java Basics - Anfänger-Themen 6
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
amelie123456 Objekt Farbe Quellcode Java Basics - Anfänger-Themen 4
M Objekt in einem Objekt speichern Java Basics - Anfänger-Themen 9
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
missy72 Klassen Objekt Array NullPointerException Java Basics - Anfänger-Themen 3
J Hinzufügen eines Objektes in ein Objekt-Array Java Basics - Anfänger-Themen 62
O Warum bekommen wir nicht die Referenz vom zurückgegebenen Objekt? Java Basics - Anfänger-Themen 4
K Ein Objekt Auto kennt den Inhalt seines links und rechtsstehenden Autos, wie soll man das ermöglichen Java Basics - Anfänger-Themen 2
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
melaniemueller Fernseher als Objekt Java Basics - Anfänger-Themen 9
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
Nina Pohl Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist Java Basics - Anfänger-Themen 6
B Objekt kopieren und sämtliche Referenzen von diesem Objekt? Java Basics - Anfänger-Themen 3
S JavaFX - Objekt an neue Stage übergeben Java Basics - Anfänger-Themen 12
T Verständnisfrage Objekt Getter Setter Java Basics - Anfänger-Themen 102
P Objekt in mehreren Methoden verwenden. Java Basics - Anfänger-Themen 3
S Aufzurufendes Objekt Java Basics - Anfänger-Themen 3
C Konstruktor ab serialisiertem Objekt Java Basics - Anfänger-Themen 4
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
P Ein Objekt nach einem String durchsuchen? Java Basics - Anfänger-Themen 7
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
J Objekt-Array dynamischer Länge aus Benutzereingaben erstellen Java Basics - Anfänger-Themen 6
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
C Arrays - deklarieren, initialisieren? Ist das ein Objekt? Java Basics - Anfänger-Themen 3
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Objekt von EJB in Controller (CDI) - Klasse füllen? Java Basics - Anfänger-Themen 3
L Zufälliges Objekt aus der ArraylList ohne java.util.Random Java Basics - Anfänger-Themen 56
N LocalTime einem Objekt zuweisen Java Basics - Anfänger-Themen 2
N Länge eines Arrays in einem Objekt testen Java Basics - Anfänger-Themen 51
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11
L Objekt an Methode übergeben Java Basics - Anfänger-Themen 4
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
J Y-Koordinate von GUI-Objekt bestimmen Java Basics - Anfänger-Themen 2
M Auf erstelltes Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 5
H Referenz Objekt aufrufen Java Basics - Anfänger-Themen 12
M Objekt mit eindeutiger ID löschen, das nächste Objekt hat dann diese ID Java Basics - Anfänger-Themen 5
N Mit Objekt der Superklasse auf Methode der Subklasse zugreifen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben