Java:将字符串转换为现有的最终对象

标签 java string logging

是否可以将 Java 字符串转换为最终的 Java 对象。

举个例子:

在 .properties 文件中,我有以下语句

log_level=Level.ALL

现在,Level.ALL是 Level 的最终对象。

我想要在代码中执行的操作是读取 .properties 文件,将 log_level 作为字符串读取,并 <somehow magically>将字符串解析为对象 Level.ALL .

最佳答案

仅存储“ALL”,然后使用Level.parse(stringFromConfig) - 您将获得最终对象Level.ALL。

<小时/>

为了满足您对确切答案的渴望,我编写了以下代码。
我不完全确定这就是你的意思,但这是我能想到的最好的。

正如您在疯狂的catch丛林中所看到的,我们正在处理的是危险的事情。

String str = "Level.SEVERE";

String pcg = Level.class.getPackage().getName();

str = pcg + "." + str;

// now we have package.ClassName.fieldName in "str"

String className = str.substring(0, str.lastIndexOf('.'));
String fieldName = str.substring(str.lastIndexOf('.') + 1, str.length());

try {
    Class<?> c = Class.forName(className);

    Field f = c.getDeclaredField(fieldName);

    // here comes content of the field
    // for non-final fields you must put field's class here instead of NULL
    Object o = f.get(null); 

    System.out.println(o);

} catch (ClassNotFoundException e) {
    e.printStackTrace();
} catch (SecurityException e) {
    e.printStackTrace();
} catch (NoSuchFieldException e) {
    e.printStackTrace();
} catch (IllegalArgumentException e) {
    e.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
}

关于Java:将字符串转换为现有的最终对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17996569/

相关文章:

java - 将 scala 函数作为 java 函数接口(interface)参数传递

java - 将 Strings.xml 中的 String-Array 更改为 ArrayList

c# - 在C#中将字符串写入固定长度的字节数组

c - 如何将文件中的文本写入C中的字符串

.NET - TextWriterTraceListener,另一个进程正在使用的文件

python 日志记录仅在调试时打印回溯

java - 在 Java 中实现递归 lambda 函数

java - Play 2.0。伊 bean 。 OneToMany 孤儿删除坏了

python - 在 pandas 中使用正则表达式验证字符串

logging - 使用 SIM-Tool 导入后 Sitecore 实例不再记录