try {
Class clazz=str.getClass (;
field field=clazz.getdeclaredfield (' value );
field.set accessible (真;
objectobj=field.get(str );
char [] charValue=(char [] ) obj;
charValue=new char [3];
for(intI=0; I
charValue[i]='a ';
}
Field.set(str,charValue );
}catch(exceptione ) {
e .打印堆栈跟踪(;
}
}我发现能满足我的要求。 代码charValue=new char [4],因为该值已更改,且希望更改长度;
意识到值不能更改,继续阅读字符串源代码,发现有count属性。 因此,将该值代码变更如下
try {
Class clazz=str.getClass (;
field field=clazz.getdeclaredfield (' value );
field.set accessible (真;
objectobj=field.get(str );
char [] charValue=(char [] ) obj;
charValue=new char [4];
for(intI=0; I
charValue[i]='a ';
}
field field1=clazz.getdeclaredfield (' count );
字段1.set accessible (true );
Field1.set(str,charValue.length );
Field.set(str,charValue );
}catch(exceptione ) {
e .打印堆栈跟踪(;
}
}
发现可以解决问题。
我又试了一下
然后再尝试一下Integer,我们发现我们可以做同样的事情。
代码为以下:
静态语音切换指示器(integera ) {
try {
Class clazz=a.getClass (;
field field=clazz.getdeclaredfield (' value );
field.set accessible (真;
Field.set(a,12312;
}catch(exceptione ) {
e .打印堆栈跟踪(;
}
}
个人为field.setaccessible(true ); 然后,还可以访问用final关键字标记的属性! 这样的反射可以改变JAVA的结构,甚至可以改变代码的可维护性
因为要更改另一个代码中的值,所以这是一个简单的例子。 只是验证通过反射可以做出无法想象的东西。