字段存在,但 NoSuchFieldException

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

我有简单的代码,我尝试获取字段的签名:

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)
java reflection
1个回答
0
投票

您可能会收到此错误,因为该字段不是静态的。试试这个:

public static int hi =  1;

与您的情况相比,“hi”是非静态(没有“静态”关键字)。静态类不能有非静态字段,因为您无法创建静态类的实例。

这就是为什么当您尝试通过反射获取它时,它会返回未找到字段。将其设置为静态应该可以解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.