gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:03:49 27 4
gpt4 key购买 nike

是否可以访问类中的公共(public)变量,而如果对该类的唯一可用访问是它的 .class
例如,如果我在 ClassAClassB 中都有 A_VARIABLE,如果我将 reference 放在每个类 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 是因为您的字段是静态的。如果不是,您将必须提供一个您希望获取其值的实例。

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

关于java - 通过使用 `.class` 检索类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33207388/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com