Java反射更新号
我不熟悉Java反射。我正在尝试制作一个程序,其中两个数字相加可以得到自定义结果。代码如下:Java反射更新号,java,reflection,Java,Reflection,我不熟悉Java反射。我正在尝试制作一个程序,其中两个数字相加可以得到自定义结果。代码如下: public class MoreTest { public static void main(String[] args) { try { Field field = Integer.class.getDeclaredField( "value" ); field.setAccessible( true );
public class MoreTest {
public static void main(String[] args) {
try {
Field field = Integer.class.getDeclaredField( "value" );
field.setAccessible( true );
field.setInt(Integer.valueOf(2),2);
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
System.out.println( 2 + 4 ); // should print 8
}
}
在上面的代码中,我能做些什么来打印我需要的输出?那么您只需将2重写为。。。2而不是4 尝试替换此:
field.setInt(Integer.valueOf(2), 2);
由此
field.setInt(Integer.valueOf(2), 4);
在代码中
然后:
Integer a = 2;
System.out.println( a + 4 ); // will print 8
这是因为整数a=2
触发自动装箱,编译器将其替换为整数a=Integer.valueOf(2)代码>,它是您先前修改为具有值4的缓存中的实例
表达式中使用了a+4
自动拆箱;编译器将其替换为a.intValue()+4
在表达式2+4
(使用数值int
literals)中,值都是原语,并且不使用任何Integer
类实例。是否尝试生成一个?为什么希望打印它8@RC.对正如我在那里读到的一样,我也在尝试同样的方法,只是在玩弄反射来了解它的力量。因此,你的问题如bowmore中所述,回答字段上的“set”,它是setInt(目标对象,新值)
,当然你必须使用Integer
对象(另请参见为什么这是可能的)它不是这样打印的,但是当我进入System.out.println((整数)2+(整数)2)时代码>,它可以工作。如果我需要打印2+2
应该是5
,您能解释一下它是如何按照您的解决方案工作的吗。谢谢你不能让2+2
打印5。这些数字由原语int
类型支持,而不是Integer
类支持