gpt4 book ai didi

java - 使用 String 查找静态变量 Java

转载 作者:行者123 更新时间:2023-12-01 09:13:53 26 4
gpt4 key购买 nike

我需要找到一种在另一个类中使用字符串来获取变量值的方法。例如,假设我有这样的类(class):

public class ClassName {
public static File f = new File ("C:\\");
}

我还在不同的类中有这个字符串:

String str = "ClassName.f";

有没有办法可以使用字符串 str 来获取 ClassName.f 的值?我不想将每个值硬编码到特定方法中。

最佳答案

假设您始终只需要静态字段,以下代码会进行一些字符串拆分并使用反射来执行此操作。运行时它将打印“oy”...

import java.lang.reflect.Field;

public class StackOverflow {

public static String oy = "OY";

public static void main(String[] args) {
System.out.println(getStaticValue("StackOverflow.oy"));
}

public static Object getStaticValue(String fieldId) {
int idx = fieldId.indexOf(".");
String className = fieldId.substring(0, idx);
String fieldName = fieldId.substring(idx + 1);

try {
Class<?> clazz = Class.forName(className);
Field field = clazz.getDeclaredField(fieldName);
return field.get(null);
} catch(Exception ex) {
// BOOM!
ex.printStackTrace();
}

return null;
}
}

如果您的静态字段不是公共(public)的,您需要使其可访问,为此,您需要添加“setAccessible”行...

import java.lang.reflect.Field;

public class StackOverflow {

private static String oy = "OY";

public static void main(String[] args) {
System.out.println(getStaticValue("StackOverflow.oy"));
}

public static Object getStaticValue(String fieldId) {
int idx = fieldId.indexOf(".");
String className = fieldId.substring(0, idx);
String fieldName = fieldId.substring(idx + 1);

try {
Class<?> clazz = Class.forName(className);
Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
return field.get(null);
} catch(Exception ex) {
// BOOM!
ex.printStackTrace();
}

return null;
}
}

关于java - 使用 String 查找静态变量 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40723770/

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