比如我有一个字符串"varone",那我怎么获得varone这个对象变量啊?
谢谢大家!

解决方案 »

  1.   

    这个估计没法做到吧。
    编译好的代码被加载到内存中执行时,变量都是按相对地址去寻址的,也就是变量名并没有实际的意义,除非你的类里有个类似于getName()之类的,可以用来比较,那还有可能,仅仅是可能。至少我知道的,除了class名找class能做到外,通过变量名找变量的还真是没看到过。
      

  2.   

    如果你能获得该对象所在Class,那么通过Field反射应该可以得到
      

  3.   

    反射能解决这个问题?LZ实际动手试过了?如果楼主真能解决这个问题,我希望LZ能贴出代码出来,我是诚心学习的。最好做个例子,比如
    class A {
        int index;
        public A(int index) {
            this.index = index;
        }
        public void show() {
            System.out.println("index=" + index);
        }
    }public class FindVariant {
        public static void main() {
            FindVariant fv = new FindVariant();
            A a = new A(1);
            Object obj = fv.findByName("a");
            if (obj instanceOf A) {
                A aa = (A)obj;
                aa.show();
                if (aa == a) { //这里是判断找到的是不是想找的,如果是,引用地址应该是一样的
                    System.out.println("find the same variant.");
                }
            }        obj = findByClassNameAndName(A.class.getName(), "a");
            if (obj instanceOf A) {
                A aa = (A)obj;
                aa.show();
                if (aa == a) {
                    System.out.println("find the same variant.");
                }
            }
        }    public Object findByName(String name) {
            //LZ如果真的解决了,能把你的处理补写完这个函数吗?
        }    public Object findByClassNameAndName(String className, String name) {
            //就算你只知道class名,你又是怎么得到实际的变量的?也请你补写完这个函数好吗?
        }
    }这个问题我很早就注意过了,但是我一直没能解决,各种反射手段我都用过,都不行,后来我用反编译(汇编)跟踪过,发现里面的变量都是用#1,#2,#3这样的标识符去标识的,也就是说对变量的操作都是按相对地址的方式去寻址的,变量名根本就没有实际的意义(正像大家所知的一样,变量名可以随便取,但是编译结果是一样的)。如果LZ包括上面几个高人真的能用反射解决的话,能否把解决方法发告诉我,我是诚心请教的,希望各位不惜赐教,谢了。
      

  4.   

    zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz