我正在尝试使用j2objc来翻译一些Java代码。不幸的是,我的代码依赖于反射。j2objc文档声称支持反射,但是当我尝试导入例如java.lang.reflect.Field时,我得到了一条错误消息,说它无法解决。
如果我试图导入我知道不受支持的类,例如Swing,我也会遇到同样的错误。
文档中说支持的其他类,例如java.util,确实可以干净地转换。
要在j2objc中启用反射支持,需要做一些特殊的事情吗?
发布于 2012-12-20 23:23:59
根据我的经验,不是这样的。如果你看一下conversions page,你会发现它支持反射功能的一个子集来支持测试框架。
我使用的是j2objc 0.56。如果我尝试调用一个方法:
java.lang.reflect.Method method;
try {
method = biometry.getClass().getMethod(methodName, int.class, double.class);
CalcResult r = (CalcResult) method.invoke(biometry,days, measurement);
return r;
} catch (SecurityException e) {
throw new BiometryException("Security Problem executing " + methodName,e);
} catch (NoSuchMethodException e) {
throw new BiometryException("No such method " + methodName,e);
} catch (IllegalArgumentException e) {
throw new BiometryException("bad argument for " + methodName,e);
} catch (IllegalAccessException e) {
throw new BiometryException("bad access for " + methodName,e);
} catch (InvocationTargetException e) {
throw new BiometryException("bad target for " + methodName,e);
}我得到了一个JavaNullPointer异常,但当然,它在我的Java JUnit中工作得很好。我一直试图通过创建选择器并从那里调用方法来解决这个问题,但奇怪的是,这也不起作用。(不会崩溃,但也不会返回正确的结果。)
发布于 2012-12-01 02:36:30
java.lang.reflect.Field最近已经修复了(或者至少所有报告的错误都修复了)。源代码是最新的,分发包在Downloads page上。
https://stackoverflow.com/questions/12743441
复制相似问题