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

标签 java string class variables

我需要找到一种在另一个类中使用字符串来获取变量值的方法。例如,假设我有这样的类(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/

相关文章:

从具有基类和接口(interface)的 c++ 类使用 SWIG 生成 Java 类

swift - 如何在 Swift 中从 UTF8 创建字符串?

c# split string in 2. 逐个字母

python - 为什么这段代码的Death类中没有 'self'?

java - 在 Eclipse 中处理非公共(public)类

java - 数组索引位置中的元素

java - 我们使用 JMS 而不是使用 REST TEMPLATE 来交换信息有什么优势?

python - 根据行和列确定字母 - python

java - 如何按顺序运行2个.java类? ( Selenium 与 Eclipse)

java - Minecraft 模组出现 Missingtexture 错误