通过使用`.class`检索类变量

时间:2015-10-19 05:46:05

标签: java

是否可以访问类中的公共变量,而对该类的唯一可用访问权限是.class
例如,如果我在A_VARIABLEClassA中都有ClassB,如果我将引用放到每个类Object中的HashSet中,我能够为HashSet中的每个项检索A_VARIABLE

public class ClassA{
    public static final String A_VARIABLE = "ABC";
}

public class ClassB{
    public static final String A_VARIABLE = "123";
}


public class ClassC{
    private void someMethod(){
        HashSet<Class> someClassHashSet = new HashSet<>();
        someClassHashSet.add(ClassA.class);
        someClassHashSet.add(ClassB.class);

        for (Class someClass : someClassHashSet){
            System.out.println("The value is: " + /*someClass.A_VARIABLE*/);
        }
    }
}

我想要打印:

The Value is: ABC
The Value is: 123

2 个答案:

答案 0 :(得分:3)

是的,你可以做到这一点,你需要的反思比直接访问慢,但仍然广泛使用:

UIViewController

您会看到此代码获取字段的值,您只能通过字符串引用。 index中的for (Class someClass : someClassHashSet){ Object value = null; try { value = someClass.getField("A_VARIABLE").get(null); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } System.out.println("The value is: " + value); } 是因为您的字段是静态的。如果不是,您将需要提供一个您想要获得该值的实例。

注意:您的someMethod()缺少返回值,例如void。

答案 1 :(得分:1)

您可以按照以下方式执行此操作

 for (Class someClass : someClassHashSet){
         if (ClassA.class.equals(someClass)) {
            System.out.println("The value is: " + ClassA.A_VARIABLE );  
          } else if (ClassB.class.equals(someClass)) {
            System.out.println("The value is: " + ClassB.A_VARIABLE );
          }
 }