2012-10-05 51 views
2

我想用j2objc来翻译一些Java代码。不幸的是,我的代码依赖于反思。 j2objc文档声称支持反射,但当我尝试导入例如java.lang.reflect.Field时,我收到一条错误消息,说它无法解析。j2objc是否真的支持反射?

这是我得到的错误,如果我尝试导入我知道不支持的类,例如摇摆。

支持文档中说明的其他类,例如java.util,干净地翻译。

是否有什么特别的事情需要做,以支持j2objc中的反射?

回答

1

以我的经验,没有它不。如果你看看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的正常工作。 我一直在尝试通过创建一个选择器并从那里调用方法来解决这个问题,但是好奇的是,那也不行。 (不会崩溃,但不会返回正确的结果。)

4

java.lang.reflect.Field最近已修复(或至少所有报告的错误都是)。源代码是最新的,分发包位于Downloads page

+0

可能支持java.lang.reflect.Field,但其他java.lang.reflect。*项不支持。所以一般来说,答案似乎不是。 (虽然其惊人之处在于任何反射都支持两种截然不同的语言) – nont

+1

从'12开始,j2objc的反射支持得到了很大改进,因为它现在支持反射密集型库,如JUnit4,Mockito,非AOP Guice和Dagger (另一个依赖注入框架)。 – tball