2012-10-05 4 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 예외를 얻을 수 있지만, 물론, 내 자바의 JUnit에서 잘 작동합니다. 나는 선택자를 만들고 거기에서 메서드를 호출하여이 문제를 해결하려고 노력했지만 흥미롭게도 작동하지 않는다. (충돌하지는 않지만 올바른 결과를 반환하지 않습니다.)

4

java.lang.reflect.Field이 최근에 수정되었거나 적어도보고 된 버그가 있습니다. 원본이 최신이며 배포 번들은 Downloads page에 있습니다.

+0

java.lang.reflect.Field가 지원되지만 다른 java.lang.reflect. * 항목은 지원되지 않을 수 있습니다. 그래서 일반적으로 대답은 '아니오'인 것처럼 보입니다. (어떤 반사가 두 가지 다른 언어에서 지원된다는 놀라운 점은 있지만) – nont

+1

JUnit4, Mockito, 비 AOP Guice 및 Dagger와 같은 반사 집약 라이브러리를 지원하므로 '12 년 이후로 j2objc의 반사 지원이 크게 향상되었습니다. (또 다른 의존성 주입 프레임 워크). – tball