gpt4 book ai didi

java - 如何使用 Java-Reflection 设置 scala.Enumeration 类型的值

转载 作者:行者123 更新时间:2023-11-29 09:01:00 24 4
gpt4 key购买 nike

我有一个复杂的基于反射的 Java 应用程序,我现在将其部分翻译成 Scala。然而,基于反射的部分仍然在 Java 中......

现在我有一个 scala 枚举类型,例如:

object DayType extends Enumeration {
type DayType = Value

val Monday = Value("Monday")
val Tuesday = Value("Tuesday")
...
}

现在我通过以下方式使用 Java 反射:

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 的处理方式……Integer.parseInt(value)。尝试使用 DayType 枚举中使用的值构造。

关于java - 如何使用 Java-Reflection 设置 scala.Enumeration 类型的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17430082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com