자바

2013-01-14 1 views
0

에 가능한 복제를 문자열 설명하는 클래스를 찾는 방법 :
Class.getArrayType in Java?자바

내가 문자열로 표시되는 형식의 클래스를 얻을 필요가있다. getMethod를 호출하려고하는데 필요한 유형의 문자열 목록 만 가지고 있습니다. 배열 유형에 대한 Class 개체를 잡아

Class<?>[] typeClasses = new Class<?>[]{Class.forName("my.type.class[]")}; 
Method method = someClass.getMethod(methodString, typeClasses); 
+0

'getMethod (...)'의 멤버는 무엇입니까? 코드 스 니펫에서 정적 가져 오기 또는 정적 메서드 정의가 누락 되었습니까? –

+0

호출하려는 메서드의 서명은 무엇입니까? –

+0

죄송합니다. 클래스 객체를 포함하도록 getMethod를 편집했습니다. – pinecone

답변

0

한 가지 방법 : STR 예를 들어, 간단한 클래스,하지만하지 않는 경우

가 Class.forName (캐릭터가)과 같이 배열로, 작동 당신이 반사적으로 만든 배열 인스턴스에 getClass()을 호출하는 것입니다. 예 :

Class someClass = Some.class; 
Class someArrayClass = java.reflect.Array.newInstance(someClass, 0).getClass(); 

Class.forName()을 사용할 수도 있지만 클래스 이름을 내부 형식으로 지정해야합니다. 예 : Object[]의 클래스 이름은 "[Ljava.lang.Object;"입니다. 클래스 이름 형식에 대한 자세한 내용은 Class.getName()을 참조하십시오.

+0

고마워요.하지만 "String []"과 같은 유형을 설명하는 문자열 만 있습니다. – pinecone

+0

그럼 기본 형식 이름을 추출하고 정규화 된 이름으로 변환 한 다음 내 대답에있는 방법 중 하나를 사용하여 구문 분석해야합니다. 나는 당신을 위해 그것을 코드화 하겠지만 누군가가 내 숟가락을 구부렸다. –

+0

두 번째 방법은 저에게 효과적입니다. [L 표기법을 사용할 수 있습니다. 감사! – pinecone

0

문제는 예제에서 전달하는 문자열이 해당 클래스의 올바른 문자열 표현이 아닙니다. 이 예제 코드는 잘 실행하고 진실 인쇄 :

String[] array = new String[] { "hello" }; 
Class<?> arrayClass = array.getClass(); 
String stringClass = arrayClass.getName(); 
Class<?> parsedClass; 
try { 
    parsedClass = Class.forName(stringClass); 
} catch (ClassNotFoundException e) { 
    throw new RuntimeException(e); 
} 
System.out.println(arrayClass.equals(parsedClass)); 

이 문자열로 배열 유형을 나타내는 방법에 대한 예제 Class#getName()의 자바 독을 참조하십시오. 이러한 문자열이 다른 곳에서오고 있고 어떤 형식인지 알고 있다면 문자열을 클래스 로더가 예상하는 형식으로 변환하는 메서드를 작성할 수 있습니다.