Klassennamen zum Aufruf eines statischen Feldes aus Variable holen

HeimCoder

Neues Mitglied
Hallo zusammen.

Ich bin neu hier, programmiere aber schon eine Weile in Java. Gerade ist mir eine Sache in den Sinn gekommen, die ich nicht lösen kann. Google gibt hier auch keine wirkliche Antwort, wenigstens nicht auf meine Suchbegriffe.

Ich möchte gerne eine statische Variable aus einer Klasse abfragen. Da ich das in mehreren Klassen habe und ich nicht immer alles mögliche nue schreiben möchte, frage ich mich gerade, ob ich nicht den Klassennamen aus einer Variablen herauslesen kann.

Vielleicht verdeutlicht ein wenig Code es besser, als es meine Worte tun:

Java:
public class KlasseMitWertA {
public static final String WERT = "A";
}

Java:
public class KlasseMitWertB {
public static final String WERT = "B";
}

Java:
public class BenutzeWertA {
String eigenerWert = KlasseMitWertA.WERT;
}

Java:
public class BenutzeWertB {
String eigenerWert = KlasseMitWertB.WERT;
}

Es werden immer mehr Klassen, die ich aus der Reihe "KlasseMitWertXY" brauche. Ich würde gerne darum herum kommen, für jede dieser neuen Klassen eine weitere Klasse "BenutzeWertXY" zu schreiben, vor allem, weil die recht komplex sind. Es ist bis jetzt jedesmal ein Copy/Past Wust, den ich dann im Nachhinein an den entsprechenden Stellen bearbeite.

Die eigentliche Frage ist: Wie bekomme ich eine generische Klasse "BenutzeWert" hin, die irgendwie auf die entsprechenden anderen Klassen "KlasseMitWertDingbums" zugreift?

Meine Idee ist nun, den Namen der KlasseMitWert als Variable zu übergeben, aber dann würde der Aufruf so aussehen:

Java:
String wert = variableMitDemKlassennamen.WERT;

Any idears?

Dank schon jetzt.
 

rme

Top Contributor
Hm, interessante Frage. Eine Variable mit dem Klassennamen könnte höchstens vom Typ "Class" sein, aber da alles static ist, kommt man mit der Class-Instanz nicht weiter. Man könnte dann Reflection benutzen und über den String "WERT" auf die Klassenvariable zugreifen, aber Reflection sollte man eigentlich vermeiden.

Kommen evtl. Annotations für dich infrage? Damit könnte man das so machen:

Java:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
@interface Wert {
    String value();
}

@Wert("WertVonA")
class A {
}

@Wert("WertVonB")
class B {
}

public class Inter {
    public static void test(Class c) {
        if(c.isAnnotationPresent(Wert.class)) {
            Wert wert = (Wert) c.getAnnotation(Wert.class);
            System.out.println(wert.value());
        }
    }

    public static void main(String[] args) {
        test(A.class); // gibt "WertVonA" aus
    }
}
 
Zuletzt bearbeitet:

HeimCoder

Neues Mitglied
Hallo rme.

Danke für deine Antwort. Da ich unter zeitdruck stehe, kann ich mir aktuell die Sache nicht weiter ansehen. Ich werde sie aber weiter verfolgen, sobald ich die Gelegenheit dazu habe.
 

Natac

Bekanntes Mitglied
Ist ein klarer Fall für Reflection.

Lies den statischen Parameter per Reflection aus und lass dir dazu die entsprechende Class-Instanz geben. Alles andere wird nur unnötig kompliziert, was meiner Meinung nach noch mehr zu vermeiden gilt, als Reflection.
Reflection ist ja nur deswegen "böse", weil es nicht Typsicher ist und man über (fast) alle Sichtbarkeits-Grenzen hinweg navigieren kann. Wenn man aber die Methode für diesen Fall richtig schreibt und eben prüft ob der Wert a) vorhanden und b) public und c) vom richtigen Typ ist, dann sollte nichts schief gehen. Wenn einer der Bedingungen nicht erfüllt ist, einfach ne "IllegalArgumentException" werfen und gut is. ;)

Zu überlegen wär auch, ob man diese Werte wirklich statisch sein müssen und man nicht mit einem Interface besser bedient wäre. Aber dafür weiß ich zu wenig über die Nutzung deiner Werte.
 

rme

Top Contributor
Reflection ist hauptsächlich böse, weil man mit Strings arbeiten muss. Wenn man die Klassenvariable mal via Tool umbennent, wird der String nicht von den Tools berücksichtigt und alles geht kaputt. Außerdem ist es ineffizient. Ich vermeide Reflection überall und hab noch keinen Fall gefunden, wo man es wirklich benötigen würde.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
SaschaMeyer Erlaubte Klassennamen Allgemeine Java-Themen 1
E Klassennamen in Deutsch oder Englisch? Allgemeine Java-Themen 5
S Deserialisieren mit anderem Klassennamen Allgemeine Java-Themen 5
D Laaaange Klassennamen und Package-Pfade. Allgemeine Java-Themen 5
S Klassennamen Allgemeine Java-Themen 11
J einen passenden Klassennamen finden... Allgemeine Java-Themen 3
T JNA, Aufruf der Funktionen einer dll Allgemeine Java-Themen 5
T Der Aufruf von CMD-Programm Allgemeine Java-Themen 30
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
berserkerdq2 Wie mache ich den rekursiven Aufruf in IJVM Allgemeine Java-Themen 3
J Reflection Aufruf: .class durch .dll ersetzen Allgemeine Java-Themen 4
R JDK installieren OpenJDK-Aufruf sehr langsam Allgemeine Java-Themen 4
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
P CMD Aufruf mit Admin-Rechte Allgemeine Java-Themen 2
cool_brivk24 Klassen Klassen Aufruf Fehlgeschlagen Allgemeine Java-Themen 14
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
J Genson - zirkulärer Aufruf Allgemeine Java-Themen 1
C file.delete() funktioniert bei zweiten aufruf nicht mehr Allgemeine Java-Themen 3
B Kodierung von String -> URL aufruf Allgemeine Java-Themen 2
G Rekursiver Aufruf von Waagengewichten Allgemeine Java-Themen 2
M datei aufruf prüfen Allgemeine Java-Themen 9
D JNI DLL Aufruf Allgemeine Java-Themen 32
M datei aufruf datum auslesen Allgemeine Java-Themen 5
A Java Verhalten bei parallelem Aufruf derselben Methode?? Allgemeine Java-Themen 2
F Parameter im Link /jar-Aufruf Allgemeine Java-Themen 12
Z Socket Aufruf einer Klasse in einer anderen Klasse Allgemeine Java-Themen 6
A JNI: Unerklärlicher Crash beim Aufruf von CallVoidMethod Allgemeine Java-Themen 9
S Variablen bei Aufruf zurücksetzen Allgemeine Java-Themen 4
J yield() Aufruf in einer synchronized-Methode Allgemeine Java-Themen 13
R JAR aus Batchdatei Aufruf Allgemeine Java-Themen 4
Kr0e Sichtbarkeitsregeln nach Executor-Aufruf Allgemeine Java-Themen 5
F rekursiver Aufruf (Sudoku und Guice) Allgemeine Java-Themen 19
B Cipher.getInstance Aufruf sehr langsam Allgemeine Java-Themen 2
M Aufruf von Unix-Shell in Java Allgemeine Java-Themen 5
G Aufruf einer Methode in IStatus exex Allgemeine Java-Themen 4
E Seltsamer aufruf von java.util.Date.toString() Allgemeine Java-Themen 3
C Netbeans - Aufruf-Reihenfolge Allgemeine Java-Themen 5
Nicer Problem mit Link aufruf Allgemeine Java-Themen 6
M Cobol-Aufruf aus Java Allgemeine Java-Themen 6
C Aufruf einer Methode einer anderen Klasse Allgemeine Java-Themen 14
T Lib/Framework zum Automatischen Aufruf von Methoden Allgemeine Java-Themen 2
R Ableiten - Methoden aufruf bei abgeleiteten Klassen Allgemeine Java-Themen 4
G DAOFactorry aufruf Allgemeine Java-Themen 10
G Aufruf einer Methode wenn Klasse noch nicht existiert Allgemeine Java-Themen 3
V Aufruf von Klasse mit Runnable versteh ich nicht Allgemeine Java-Themen 8
S Übergabe / Aufruf einer beliebigen Methode in einer anderen Allgemeine Java-Themen 9
R toString() methode überschreiben mit rekursivem aufruf. Allgemeine Java-Themen 8
N Main-Klasse wird beim Aufruf des JARs nicht gefunden Allgemeine Java-Themen 8
D Problem bei Aufruf einer Funktion Allgemeine Java-Themen 3
B Null Pointer Exception bei Canvas-objekt-Aufruf Allgemeine Java-Themen 12
S Aufruf in Konsole mit beliebig vielen Argumenten? Allgemeine Java-Themen 18
reibi Aufruf eines private Konstruktors Allgemeine Java-Themen 7
M Rekrusiver Aufruf ? Allgemeine Java-Themen 6
D aufruf beim kopieren Allgemeine Java-Themen 11
J einfachster Servlet-Aufruf klappt nicht Allgemeine Java-Themen 3
J Konstruktor-Aufruf nur aus einem bestimmten Package erlauben Allgemeine Java-Themen 5
S problem mit externen aufruf Allgemeine Java-Themen 4
M [Windows] Aufruf von Java mit Sonderzeichen im Classpath Allgemeine Java-Themen 5
D VM crash nach Aufruf von GetFieldID und GetMethodID in JNI Allgemeine Java-Themen 31
G PDF AUfruf Allgemeine Java-Themen 6
S Aufruf meines Programms Allgemeine Java-Themen 2
U zweifacher Aufruf animiertes gif Allgemeine Java-Themen 7
G Konstruktor-Aufruf nun mit oder ohne Typ? Allgemeine Java-Themen 9
T CMD nach aufruf von javaw Programmname wieder schließen Allgemeine Java-Themen 3
Z Problem beim Aufruf eines Listener? Allgemeine Java-Themen 4
A Problem beim Aufruf von javac Allgemeine Java-Themen 7
W Aufruf von JavaBeans Allgemeine Java-Themen 3
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
M Array Rang eines Elements Allgemeine Java-Themen 4
OnDemand Teile eines Links entfernen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
H Textposition eines gedrehten Textes verschieben Allgemeine Java-Themen 8
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
N Fahrtrichtung eines selbstfahrenden Auto ändern Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
kodela Breite eines erweiterten Monitors feststellen Allgemeine Java-Themen 5
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
bueseb84 Wget mit Wildcards - oder wie lädt man bei JFrog die letzte Version eines Artifacts herunter Allgemeine Java-Themen 3
N Erkennen eines Programs Allgemeine Java-Themen 2
N Pausieren eines Programmes Allgemeine Java-Themen 4
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben