将枚举值从c#传递给Java构造函数
本文关键字:Java 构造函数 枚举 | 更新日期: 2023-09-27 17:51:12
我需要使用IKVM从c#运行JAR文件。JAR包含一个类,该类的构造函数将枚举作为其参数之一。我面临的问题是,当我尝试在c#中使用IKVM创建该类的实例时,抛出IllegalArgumentException。
Java enum:public class EventType{
public static final int General;
public static final int Other;
public static int wrap(int v);
}
Java类:
public class A{
private EventType eType;
public A(EventType e){
eType = e;
}
}
c#用法:/* loader is the URLClassLoader for the JAR files */
java.lang.Class eArg = java.lang.Class.forName("A", true, loader);
/* Instantiate with the underlying value of EventType.General */
object obj = eArg.getConstructor(EventType).newInstance(0);
eArg被forName(..)方法正确加载。然而,eArg类的实例化会抛出IllegalArgumentException异常。除了exception. targetsite . customattributes指定该方法未实现之外,异常中没有任何消息。我还尝试将构造函数参数作为java.lang.Field对象传递,但即使这样也会给出相同的异常。
谁有任何建议,我可能做错了什么?不需要传递0(底层值),而需要传递(带框的)enum值。所以这应该可以工作:
/* loader is the URLClassLoader for the JAR files */
java.lang.Class eArg = java.lang.Class.forName("A", true, loader);
/* Instantiate with the underlying value of EventType.General */
object obj = eArg.getConstructor(EventType).newInstance(EventType.General);
我不是100%确定,但我认为问题是,在。net中,enum
的默认底层类型是int
,但在Java中,你有EventType
定义为一个类。Java中的构造函数期望一个对象,但从。net中,您试图传递相当于int
的值。