wrote:
> 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").t oGenericString());
> 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().getGenericSuper class()
> .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?
--