2012-08-22 3 views
-1

내 프로그램에서 List가 구현하는 클래스 유형을 알아 내려고하고 있습니다.필드가 어떤 목록 유형인지 알아보십시오

JSON 데이터를 가져 와서 루트 객체에 배치하고 있습니다. 그런 다음이 루트 객체에는 JSON 데이터의 각 요소를 저장하는 List가 있습니다.

예를 들어 내가

List<Person> people 
List<Location> locations 

그래서 내가 할 수 있기를 원하는 루트 클래스의 각 필드를 통해 루프가의 선언 필드가 루트가, 클래스의 종류를 목록을 잡아 그 나는 현재를보고, 그 클래스에 대한 특정 함수를 호출한다. (특정 함수를 말할 때 인터페이스를 구현하는 클래스 유형을 반환하고 목록을 분리하기 위해 구현하는 함수를 실행할 수있는 인터페이스를 선언해야합니다.

Class<?> clss = fieldObj.getType() (여기서 fieldObj는 유형 Field)는 목록임을 반환합니다.이 필드의 유형은 어떻게 얻을 수 있습니까?

+0

에 대한 코드를 인쇄하면 유형에 따라 무엇을 의미합니까 어떻게 봐? Implemenation'ArrayList' 대'LinkedList' 또는 제네릭 타입'Person' 대'Location'? –

+0

[이 답변보기 (http://stackoverflow.com/a/11264363/1065197). –

답변

1

런타임에 목록에 포함 된 개체 유형을 찾고있는 경우 List에서 그렇게 할 수 없습니다. 이것은 타입 소거 때문입니다. 즉 런타임에 모두 ListList<Object>입니다. 목록에서 객체 유형을 결정해야하는 경우 목록의 첫 번째 요소를 가져 와서 instanceof 또는 assignableFrom

+0

나는 이것을 여기에서 사용하면서 결국 객체로부터 목록을 가져 와서 클래스를 잡고 새로운 인스턴스를 만들었다. 완벽한 감사합니다. 이것은 올바른 수업을 듣고있는 gaurentee를 허용하기 때문에 현장에서 그것을 얻으려고하는 것보다 낫습니다! – DMCApps

1

Java 1.5+에서는 Field 클래스의 getGenericType() 메소드로 부분적으로 수행 할 수 있습니다.

Field.getGenericType()은 클래스 파일의 서명 속성을 참조합니다. 속성을 사용할 수없는 경우 제네릭의 도입으로 변경되지 않은 Field.getType()으로 돌아갑니다.

예 : here을 참조하십시오.

$ java FieldSpy FieldSpy list

> GenericType: java.util.List<java.lang.Integer>

관련 문제