反射能解决这个问题?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包括上面几个高人真的能用反射解决的话,能否把解决方法发告诉我,我是诚心请教的,希望各位不惜赐教,谢了。
编译好的代码被加载到内存中执行时,变量都是按相对地址去寻址的,也就是变量名并没有实际的意义,除非你的类里有个类似于getName()之类的,可以用来比较,那还有可能,仅仅是可能。至少我知道的,除了class名找class能做到外,通过变量名找变量的还真是没看到过。
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包括上面几个高人真的能用反射解决的话,能否把解决方法发告诉我,我是诚心请教的,希望各位不惜赐教,谢了。