是否可以访问类中的公共变量,而对该类的唯一可用访问权限是.class
。
例如,如果我在A_VARIABLE
和ClassA
中都有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
答案 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 );
}
}