Java 如何从ClassName.class获取静态最终属性?

Java 如何从ClassName.class获取静态最终属性?,java,static,final,Java,Static,Final,我有这样的类数组 private static final Class<?>[] CLASSES = new Class[]{ First.class, Second.class, }; 需要进行循环以将属性与以下特定字符串进行比较: for (Class<?> item : CLASSES) { string.equals(item.PROPERTY) } for(类项目:类){ string.equals(item.PROPERTY) }

我有这样的类数组

private static final Class<?>[] CLASSES = new Class[]{
    First.class,
    Second.class,
};
需要进行循环以将
属性
与以下特定字符串进行比较:

for (Class<?> item : CLASSES) {
    string.equals(item.PROPERTY)
}
for(类项目:类){
string.equals(item.PROPERTY)
}
但是我找不到从“.class”中退出的方法来获取
item.PROPERTY

在这种情况下,如何以正确的方式获取
PEOPERY

谢谢

您应该使用:

    for (Class<?> item : CLASSES) {
        Field f = item.getDeclaredField("PROPERTY");
        string.equals(f.get(item));
    }
for(类项目:类){
字段f=项.getDeclaredField(“属性”);
等于(f.get(item));
}
您应该使用:

    for (Class<?> item : CLASSES) {
        Field f = item.getDeclaredField("PROPERTY");
        string.equals(f.get(item));
    }
for(类项目:类){
字段f=项.getDeclaredField(“属性”);
等于(f.get(item));
}

您的意思是如何处理异常

enter code here
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
    Class<?>[] classes = new Class[] { ClassA.class, ClassB.class, };

    for (Class<?> item : classes) {
        Field f = item.getDeclaredField("PROPERTY");
        System.out.println(f.get(item));
    }
}
enter code here
public static void main(String[] args) {
    Class<?>[] classes = new Class[] { ClassA.class, ClassB.class, };

    for (Class<?> item : classes) {
        try {
            Field f = item.getDeclaredField("PROPERTY");
            System.out.println(f.get(item));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
在此处输入代码
publicstaticvoidmain(字符串[]args)抛出NoSuchFieldException、IllegalAccessException{
类[]类=新类[]{ClassA.Class,ClassB.Class,};
用于(类项目:类){
字段f=项.getDeclaredField(“属性”);
系统输出打印项次(f.get(item));
}
}
在这里输入代码
公共静态void main(字符串[]args){
类[]类=新类[]{ClassA.Class,ClassB.Class,};
用于(类项目:类){
试一试{
字段f=项.getDeclaredField(“属性”);
系统输出打印项次(f.get(item));
}捕获(例外e){
e、 printStackTrace();
}
}
}

您的意思是如何处理异常

enter code here
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
    Class<?>[] classes = new Class[] { ClassA.class, ClassB.class, };

    for (Class<?> item : classes) {
        Field f = item.getDeclaredField("PROPERTY");
        System.out.println(f.get(item));
    }
}
enter code here
public static void main(String[] args) {
    Class<?>[] classes = new Class[] { ClassA.class, ClassB.class, };

    for (Class<?> item : classes) {
        try {
            Field f = item.getDeclaredField("PROPERTY");
            System.out.println(f.get(item));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
在此处输入代码
publicstaticvoidmain(字符串[]args)抛出NoSuchFieldException、IllegalAccessException{
类[]类=新类[]{ClassA.Class,ClassB.Class,};
用于(类项目:类){
字段f=项.getDeclaredField(“属性”);
系统输出打印项次(f.get(item));
}
}
在这里输入代码
公共静态void main(字符串[]args){
类[]类=新类[]{ClassA.Class,ClassB.Class,};
用于(类项目:类){
试一试{
字段f=项.getDeclaredField(“属性”);
系统输出打印项次(f.get(item));
}捕获(例外e){
e、 printStackTrace();
}
}
}


你的意思是使用反射吗?@talex使用“getField”会给出“未处理的异常:java.lang.NoSuchFieldException”。所以我假设没有。也许我遗漏了somth?AFAIR,您需要对私有字段使用
getDeclaredField
。@talex这也给了我同样的错误。@ΦXocę웃Пepeúpaツ 谢谢,我想是的,但我不知道如何在这种情况下使用它(见其他评论)。有什么建议吗?你是说使用反射吗?@talex使用“getField”会给我“未处理的异常:java.lang.NoSuchFieldException”。所以我假设没有。也许我遗漏了somth?AFAIR,您需要对私有字段使用
getDeclaredField
。@talex这也给了我同样的错误。@ΦXocę웃Пepeúpaツ 谢谢,我想是的,但我不知道如何在这种情况下使用它(见其他评论)。有什么建议吗?当字段是静态的时,
get
的参数将被忽略。谢谢,但是使用“getField”或“getDeclaredField”会给我“未处理的异常:java.lang.NoSuchFieldException”。可能是什么?你能分享更多你的代码吗?不应该这样。请确保提供正确的字段名。@matt true,但如果使用
get()
,则仍然需要提供参数。我认为从语义上讲,最好使用
null
,因为参数应该是类的实例。您传递的参数是另一个对象的实例:
Class
。不管怎么说,它被忽略了,所以这是一个没有意义的问题。当字段是静态的时,
get
的参数被忽略。谢谢,但是使用“getField”或“getDeclaredField”会给我“未处理的异常:java.lang.NoSuchFieldException”。可能是什么?你能分享更多你的代码吗?不应该这样。请确保提供正确的字段名。@matt true,但如果使用
get()
,则仍然需要提供参数。我认为从语义上讲,最好使用
null
,因为参数应该是类的实例。您传递的参数是另一个对象的实例:
Class
。不管怎样,它被忽略了,所以这是一个没有意义的观点。