Re: How to access a member constant by FQN
Sideswipe wrote:
Hmm, ok, let me try this:
Class.forName("com.whatever.mycompany.MyConstants");
// MyConstants is now loaded and the static members initialized
MY_CONST is now an Integer instance floating around in the JVM. So, I
don't NEED a new instance of it, but I want to access it by a fully
qualified name.
When I do: Class.newInstance() <-- object is returned but if I am
given the string: "com.whatever.mycompany.MyConstants.MY_CONST" I am
not being given a FQN to a class, I am being given a FQN to a static
final member of a Class.
Another way to say it, how do I make an assignment to this instance
based on the FQN as a String. This is all runtime/reflection -- not
compile time so I have no way to know what will be referenced. If I
knew the Outter class I could use reflection to get the fields and
discover it by name, but I can't know that the String given to me
represents a class and not one of it's members.
If I understand the problem, you have a String
"com.whatever.mycompany.MyConstants.MY_CONST" and want to access the
corresponding field.
You first need to split it into the fully qualified class name and the
field name. Use Class.forName to get a reference to the Class object.
Use the Class's getField method to get a reference to the Field object
for "MY_CONST". Take a look at the API documentation for Field to see
how to do specific operations on the Field, such as getting a reference
to the Integer.
Almost, but not quite, always this sort of reflection tangle is a
mistake, and there is a simpler, cleaner solution. It may be worth
describing the problem you are trying to solve with all this.
Patricia