Getting a field value in the calling class

J

JanuaryLeung

Hi

I have written two classes hoping to find out in run time the value of
a field in the calling class. But my attempt resulted in a run time
error. Anyone could help fix my code or suggestion? Thank you!

Jan
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

public class GetCallingClass {
void printCallingClassInfo() throws ClassNotFoundException,
SecurityException, NoSuchFieldException, IllegalArgumentException,
IllegalAccessException {
StackTraceElement[] ste = new Throwable().getStackTrace();
if (ste.length > 1) {
System.out.println(ste[1].getClassName()); // print CallClass

System.out.println(CallClass.class.getField("m").toGenericString());
Class c = ste[1].getClass();
Integer m2 = (Integer)
CallClass.class.getField("m").get(ste[1].getClass());
System.out.println("m2 = "+m2);
System.out.println(this.getClass().getGenericSuperclass()
.getClass().getName()); // print java.lang.Class
}
}
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

public class CallClass {
public int m = 0;
public static void main(String[] args) throws SecurityException,
ClassNotFoundException, NoSuchFieldException,
IllegalArgumentException, IllegalAccessException {
GetCallingClass c = new GetCallingClass();
c.printCallingClassInfo();
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
E

Eric Sosman

Hi

I have written two classes hoping to find out in run time the value of
a field in the calling class. But my attempt resulted in a run time
error. Anyone could help fix my code or suggestion? Thank you!

Jan
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

public class GetCallingClass {
void printCallingClassInfo() throws ClassNotFoundException,
SecurityException, NoSuchFieldException, IllegalArgumentException,
IllegalAccessException {
StackTraceElement[] ste = new Throwable().getStackTrace();
if (ste.length > 1) {
System.out.println(ste[1].getClassName()); // print CallClass

System.out.println(CallClass.class.getField("m").toGenericString());
Class c = ste[1].getClass();
Integer m2 = (Integer)
CallClass.class.getField("m").get(ste[1].getClass());
System.out.println("m2 = "+m2);
System.out.println(this.getClass().getGenericSuperclass()
.getClass().getName()); // print java.lang.Class
}
}
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

public class CallClass {
public int m = 0;
public static void main(String[] args) throws SecurityException,
ClassNotFoundException, NoSuchFieldException,
IllegalArgumentException, IllegalAccessException {
GetCallingClass c = new GetCallingClass();
c.printCallingClassInfo();
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

I'm not sure what else is going on, but one thing stands
out: There are no occurrences of `m' in this program, because
no instances of CallClass have been created. Where is the `m'
whose value you think you are going to get?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,776
Messages
2,569,603
Members
45,188
Latest member
Crypto TaxSoftware

Latest Threads

Top