2010-03-03 8 views
5

Ich finde mich oft Code wie folgt schreiben:Howto erhalten den Java-Compiler einen Variablennamen in einen String einzufügen

throwExceptionWhenEmpty(fileType, "fileType"); 
throwExceptionWhenEmpty(channel, "channel"); 
throwExceptionWhenEmpty(url, "url"); 

Die throwExceptionWhenEmpty Methode macht etwas wie folgt aus:

private void throwExceptionWhenEmpty(final String var, final String varName) { 
    if (var == null || var.isEmpty()) { 
     throw new RuntimeException("Parameter " + varName + " may not be null or empty."); 
    } 
} 

Ich würde Ich möchte diese offensichtliche Redundanz vermeiden, indem ich den Variablennamen als String übergebe. Gibt es eine Möglichkeit, wie der Java-Compiler den Variablennamen in die Zeichenfolge für mich einfügen kann?

ich glücklich sein würde, wenn ich so etwas schreiben könnte:

throwExceptionWhenEmpty(fileType, nameOf(fileType)); 

Antwort

2

Nein, Java kann das nicht, bis es beginnt, Schließungen zu unterstützen, die Felder (und Methoden) zu erstklassigen Bürgern der Programmiersprache machen.

Siehe http://docs.google.com/Doc?id=ddhp95vd_6hg3qhc für einen Überblick über einen der Vorschläge, in denen Sie tun könnten, was Sie wollen mit #field Syntax.

3

, dass Ihre Frage beantworten: SO: How to get name of a variable.

Es ist nicht (einfach) in Java möglich.

Sie könnten einen Präprozessor verwenden und ihn in Ihren Build-Prozess integrieren. Das wäre wahrscheinlich sehr einfach und portabel. Aber wie Stephen C im Kommentarbereich gesagt hat, ist das wirklich nicht der Java-Weg und wird daher nicht empfohlen.

+1

-1 - empfehle keine Präprozessoren für diese Art von Sache. Es ist nicht der Java-Weg. (Ich würde nicht einmal den Präprozessor missbrauchen, um solche Sachen in C zu machen !!) –

+0

Sie haben absolut Recht, ich habe das zu meiner Antwort hinzugefügt. Ich habe die Preprozessor-Anweisung nicht gelöscht, da sie sein Problem lösen würde. –

2

Variablennamen gehen verloren, wenn der Code kompiliert wird, es sei denn, Reflection bietet Zugriff darauf (und selbst dann) Ich bin mir ziemlich sicher, dass es unmöglich ist. Es tut uns leid.

+0

Deshalb habe ich nach Compilersubstitution gefragt. –

+0

Oh ja, ich verstehe. Nun, ich denke nicht, dass ein bekannter Compiler das kann, aber vielleicht ein Code-Präprozessor? Natürlich sind sie oft fieser als das Problem, das Sie lösen wollen. –

2

Java hat nicht wirklich eine Möglichkeit, dies zu tun, aber Sie können Hilfe von Ihrer IDE bekommen (wenn Sie eine verwenden). In Eclipse kann man eine Vorlage wie folgt erstellen, die helfen könnte.

throwExceptionWhenEmpty(${varname}, "${varname}"); 
${cursor} 
0

Sie etwas tun könnte wie (ich könnte Missverständnis, was Sie tun wollen)

var.getClass() getName()

Wo Var ist Ihr Objekt in die Methode als ein Objekt übergeben.

Verwandte Themen