[英]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.