Felder mit Reflektion festlegen - String hat keine valueOf (String) -Methode

8

Ich setze öffentliche Felder von Object this über Reflektion. Sowohl der Feldname als auch der Wert werden als String angegeben. Ich verwende mehrere verschiedene Feldtypen: Boolean , Integer , Float , Double , eine eigene enum und eine String .

Es funktioniert mit allen außer mit String . Die Ausnahme, die ausgelöst wird, ist, dass keine Methode mit der Signatur String.valueOf(String) existiert ... Jetzt benutze ich eine Dirty instanceof -Ausweichlösung, um zu erkennen, ob jedes Feld ein String ist. In diesem Fall kopiere einfach den Wert in das Feld.

%Vor%

Irgendwelche Ideen, wie Sie diese Problemumgehung vermeiden können?

Glaubst du java.lang.String sollte die Methode valueOf(String) ?

unterstützen?

Danke.

    
fabb 30.05.2010, 14:12
quelle

4 Antworten

8

Wie Sie bemerkt haben, gibt es kein String.valueOf(String) . Allerdings würde ich Ihre Implementierung nicht als Hack betrachten, nur als Anerkennung der geringen Inkonsistenz in den JDK-Klassen.

Für eine robustere Konvertierung von String in Objekt sollten Sie PropertyEditors , die String-zu-Objekt-Konvertierung direkt unterstützen - Implementierung für primitive Typen und standardmäßig bereitgestellte Zeichenfolgen.) Ihre Syntaxanalysemethode ist dann konsistent und erweiterbar, um verschiedene Typen zu behandeln. Besser noch sind die Conversion-Klassen in Commons Convert und Spring 3 Type Converters , da diese sich ausschließlich auf die Konvertierung und nicht auf die Bearbeitung von Eigenschaften durch die GUI konzentrieren.

    
mdma 30.05.2010, 14:38
quelle
0
  

Irgendwelche Ideen, wie Sie diese Problemumgehung vermeiden können?

Dies hängt weitgehend von der Implementierung von parseMethod ab.

  

Glauben Sie, dass java.lang.String die Methode valueOf (String) unterstützen sollte?

Wofür? Das wäre ein No-Op, einfach seinen Parameter zurückgeben.

    
Péter Török 30.05.2010 14:17
quelle
0
  

Glaubst du java.lang.String sollte die Methode valueOf(String) ?

unterstützen?

Nein. Es hätte fast keinen Wert außerhalb der Reflektion, und Reflektion sollte sowieso nicht gefördert werden ( Effektive Java 2nd Edition, Item 53: Schnittstellen zur Reflektion bevorzugen ).

    
polygenelubricants 30.05.2010 14:35
quelle
0

Im Falle eines Strings:

Methode parseMethod = wField.getType (). getMethod ("valueOf", neue Klasse [] {Object.class});

wField.set (this, parseMethod.invoke (wField, value));

    
Awanish Kumar 10.06.2013 10:22
quelle

Tags und Links