This week's book giveaway is in the Servlets forum.
We're giving away four copies of Murach's Java Servlets and JSP and have Joel Murach on-line!
See this thread for details.
The moose likes Java in General and the fly likes java.lang.Reflection throwing error when using (String)field.get(new String()); Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

Win a copy of Murach's Java Servlets and JSP this week in the Servlets forum!
JavaRanch » Java Forums » Java » Java in General
Bookmark "java.lang.Reflection throwing error when using (String)field.get(new String());" Watch "java.lang.Reflection throwing error when using (String)field.get(new String());" New topic

java.lang.Reflection throwing error when using (String)field.get(new String());

Oliver Bachmann

Joined: Nov 14, 2010
Posts: 3

I have a class in with variable definitions, which I want to read with Reflection:

and I want to read the value of the String with the following program called :

and this is the error message:

I am using this type conversion because there is no getString() or getStr() method in java.lang.reflect.Field - what else can I use? I've been googling for this, but found no solution now that some hours have passed.
Thank you for helping me with this!
Paul Clapham

Joined: Oct 14, 2005
Posts: 18541

What else could you use? Well, there is the documentation for the Field.get() method. Which says
Returns the value of the field represented by this Field, on the specified object.

You have made a bad choice for "the specified object". Admittedly the documentation isn't all that clear, but it still doesn't support that choice. Read
it (again?) more carefully.
Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 14074

You are calling field.get with the wrong argument.

Some other remarks:

It is almost never necessary to create new String objects explicitly. Class String is immutable. Instead of writing things like these:

Just write this, which has the same effect, except that it does not unnecessarily create a new String object:

Something similar for Integer and Long objects, instead of writing this:

Just write this, making use of autoboxing (which can avoid unnecessarily creating new objects):

Java Beginners FAQ - JavaRanch SCJP FAQ - The Java Tutorial - Java SE 7 API documentation
Scala Notes - My blog about Scala
Oliver Bachmann

Joined: Nov 14, 2010
Posts: 3
Hi Paul, thank you very much for your answer.

This is working:

when setting the correct class name as parameter.

The original description of the problem was too short. In the original sourcecode (not the example I posted here) I only had an Object available, and not the class Categories itself. Besides that, I also passed the wrong object instance to getField, not really knowing that it had to be an instance of the class Categories.
I figured out how it works, using an Object instead of Categories itself:

The output is:

Jesper, thank you for the good, short answer and the tips regarding the initialization of my variables

Thank you,
Rob Spoor

Joined: Oct 27, 2005
Posts: 19651

Oliver Bachmann wrote:

Don't do that, please. You should get the String class literal and compare directly:
Likewise for Integer, Long, etc. Remember, you can get a class literal for each class by just saying X.class, with X being the class name. You can even do that for arrays, for instance String[].class is the class for String arrays, and String[][].class is the class for arrays of arrays of Strings.

How To Ask Questions How To Answer Questions
jQuery in Action, 2nd edition
subject: java.lang.Reflection throwing error when using (String)field.get(new String());
Similar Threads
converting a string color to an object color
How to access private static variables outside the class?
How to convert java object in a request scope to javascript object???
How to check given field whether primitive or user defined
Need help on JTree