我有简单的代码,我尝试获取字段的签名:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Main {
static class Test {
int hi = 1;
}
public static void main(String[] args) throws NoSuchFieldException, NoSuchMethodException, IllegalAccessException {
Field hi = Test.class.getDeclaredField("hi");
Field field = Field.class.getDeclaredField("signature");
field.setAccessible(true);
String signature = (String) field.get(hi);
System.out.println(signature);
}
}
但是,我遇到了这个异常:
Exception in thread "main" java.lang.NoSuchFieldException: signature
at java.base/java.lang.Class.getDeclaredField(Class.java:2663)
at Main.main(Main.java:13)
您可能会收到此错误,因为该字段不是静态的。试试这个:
public static int hi = 1;
与您的情况相比,“hi”是非静态(没有“静态”关键字)。静态类不能有非静态字段,因为您无法创建静态类的实例。
这就是为什么当您尝试通过反射获取它时,它会返回未找到字段。将其设置为静态应该可以解决您的问题。