在Java中使用反射时出现未处理的异常

问题描述 投票:0回答:2

我目前正在制作Minecraft Mod,我需要将自己的浮动对象设置为基类的私有浮动对象。他们对方法进行了硬编码,我基本上在其上进行扩展,但是它使用了PRIVATE float“ rendererUpdateCount”

我正在尝试将浮点数“ updateCount”设置为始终等于“ rendererUpdateCount”的值]

问题是我似乎无法通过反射获得浮点数。

目前,我正在尝试执行以下操作:

Class er = EntityRenderer.class;
Field field = er.getDeclaredField("rendererUpdateCount");

唯一的问题是它抛出Unhandled exception type NoSuchFieldException表示该浮点数不存在。

所以我该如何正确执行此操作?

java exception minecraft forge
2个回答
0
投票

[只要我们得到Unhandled exception...,就表示它是checked Exception,并要求try / catch()。

Checked:是在编译时检查的异常。如果有的话方法中的代码引发检查异常,则该方法必须要么处理异常,要么必须使用引发关键字。

Unchecked是在编译时未检查的异常。

Java exceptionsError类下的RuntimeException中是unchecked exceptions,所有在throwable下的都是checked


0
投票

在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);
}
© www.soinside.com 2019 - 2024. All rights reserved.