是否有可能访问类中的公共变量,而对该类的唯一可用访问是它的.class
。
作为一个例子,如果我在ClassA
和ClassB
中都有A_VARIABLE
,如果我将引用放到每个类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
是的,你可以这样做,你需要反射,这比直接访问慢,但仍然广泛使用:
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);
}
您可以看到,这段代码获取了一个字段的值,您只能通过字符串引用该字段。.get(null)
中的null
是因为您的字段是静态的。如果它们不存在,则必须提供一个希望从中获取值的实例。
注意:您的someemethod()缺少返回值,例如void。
您可以按以下方式操作
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 );
}
}