是否可以将Java String转换为最终的Java Object。
让我们举一个例子:
在.properties文件中,我有以下声明
log_level=Level.ALL
现在,Level.ALL
是Level的最终对象。
我想在代码中做的是读取.properties文件,将log_level作为String读取,<somehow magically>
将String解析为对象Level.ALL
。
答案 0 :(得分:2)
仅存储“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();
}
答案 1 :(得分:0)
if (System.getProperty("STANDALONE_LOG_LEVEL")!=null){
String logLevel= System.getProperty("STANDALONE_LOG_LEVEL");
switch(logLevel){
case "ERROR" : this.aRootLogLevel=Level.ERROR;
break;
case "DEBUG" : this.aRootLogLevel=Level.DEBUG;
break;
case "INFO" : this.aRootLogLevel=Level.INFO;
break;
case "WARN" : this.aRootLogLevel=Level.WARN;
break;
case "FATAL" : this.aRootLogLevel=Level.FATAL;
break;
default : this.aRootLogLevel=Level.INFO;
}
}
rootLogger.setLevel( this.aRootLogLevel );