我目前正在制作Minecraft Mod,我需要将自己的浮动对象设置为基类的私有浮动对象。他们对方法进行了硬编码,我基本上在其上进行扩展,但是它使用了PRIVATE float“ rendererUpdateCount”
我正在尝试将浮点数“ updateCount”设置为始终等于“ rendererUpdateCount”的值]
问题是我似乎无法通过反射获得浮点数。
目前,我正在尝试执行以下操作:
Class er = EntityRenderer.class;
Field field = er.getDeclaredField("rendererUpdateCount");
唯一的问题是它抛出Unhandled exception type NoSuchFieldException
表示该浮点数不存在。
所以我该如何正确执行此操作?
[只要我们得到Unhandled exception...
,就表示它是checked Exception
,并要求try / catch()。
Checked:是在编译时检查的异常。如果有的话方法中的代码引发检查异常,则该方法必须要么处理异常,要么必须使用引发关键字。
Unchecked是在编译时未检查的异常。
在Java exceptions
和Error
类下的RuntimeException
中是unchecked exceptions
,所有在throwable下的都是checked
在Java中,您必须处理已检查的异常,其中NoSuchFieldException
为1。 “处理”要么是捕获它,要么是声明将其抛出的方法。让我们使用选项1,您不妨捕获父异常类ReflectiveOperationException
,因为到编码完成时,使用反射可能会抛出比NoSuchFieldException
更多的异常类型。
尝试一下:
try {
Class er = EntityRenderer.class;
Field field = er.getDeclaredField("rendererUpdateCount");
field.setAccessible(true); // ignore/bypass it being “private”
field.set(myInstance, myFloat);
} catch (ReflectiveOperationException e) {
throw new RuntimeException(e);
}