[英]How to use Java-Reflection to set the value of type scala.Enumeration
我有一个复杂的基于反射的Java应用程序,现在将其部分翻译为scala。 但是,基于反射的部分仍在Java中...
现在,我有一个scala枚举类型,例如:
object DayType extends Enumeration {
type DayType = Value
val Monday = Value("Monday")
val Tuesday = Value("Tuesday")
...
}
现在,我通过以下方式使用Java Reflection:
public static void setFieldValue(Object o, String fieldName, String value) {
Field field;
try {
field = o.getClass().getField(fieldName);
} catch (NoSuchFieldException e) {
// in Scala EVERY field is private.
field = o.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
}
Class type = field.getType();
if (type == Float.TYPE) {
field.setFloat(o, Float.parseFloat(value));
}
if (type == Integer.TYPE) {
field.setInt(o, Integer.parseInt(value));
}
...
if (type.getName().equals("scala.Enumeration$Value")) {
System.out.println("fieldname: " + field.getName());
System.out.println("fieldtype: " + field.getType());
try {
field.set(o, ???);
} catch (Exception e) {
System.out.println(e.getMessage());
}
...
至少类型识别可以正常工作,但是,还有两个问题:1.是否有一种无需通过名称即可识别类型的方法? if(type == Enumeration.class)不起作用,if(type == Enumeration)也不起作用(第二个解决方案甚至无法编译)2.如何设置值? 如何替换“ ???” 简单地执行field.set(o,value)会导致“无法将scala.Enumeration $ Value字段diva.module.AdaptationFloodingNew.adaptMode设置为java.lang.String”(这是合理的)。
代码中缺少的是一种将值从字符串转换为DayType的方法。 有点像处理整数的方式... Integer.parseInt(value)。 尝试使用DayType枚举中使用的Value构造。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.