2012-10-22 4 views
7

많은 질문을하지 않으므로이 질문이 명백 할 수도 있습니다. 예 : I 필드 contents이 바이트 배열의 인스턴스가 있는지 확인하려고java.lang.reflect.Field 유형이 바이트 배열인지 확인하십시오.

public class Document { 

    private String someStr;  

    private byte[] contents; 

    //Getters and setters 

} 

: I 클래스가 있습니다. 내가 시도한 것 :

Class clazz = Document.class; 
Field[] fields = clazz.getDeclaredFields(); 
for (Field field : fields) { 
    if (field.getType().isArray()) { 
     Object array = field.getType(); 
     System.out.println(array); 
    } 
} 

이 코드의 출력은 class [B입니다. 나는 바이트 배열이 발견 볼 수 있지만 내가 할 경우 :

if (array instanceof byte[]) {...} 

을이 조건은 결코 true 없습니다. 왜 그런가요? 그리고 객체에 byte[] 유형의 필드가 있는지 확인하는 방법은 무엇입니까?

답변

15

array instanceof byte[] 검사를 참조하여 식별 될 수있다. 그러나 귀하의 경우 arraybyte[]이 아니며, byte[]을 나타내는 Class 유형의 객체입니다.

당신은 따라서 다음과 같은 검사가 필요, 어떤 종류의 TT.class 등을 나타내는 Class에 액세스 할 수 있습니다 배열이 클래스는 instanceof Class 사실이 될 것입니다 경우

if (array == byte[].class) { ... } 
+0

감사합니다. 이제 알 수 있습니다. :) –

0

당신이 시도하는 경우 :

Class<?> array = field.getType(); 
System.out.println(array.getCanonicalName()); 

byte[]를 인쇄합니다. 그러나 @ axtavt의 대답은 더 좋습니다.

7

을 ..

당신이 만약 사용할 수있는 필드의 유형을 확인하고 싶습니다

if(field.getType() == byte[].class) 
3

시험해보기 :

Class<?> cls = field.getType(); 
if (cls.isAssignableFrom(byte[].class)) { 
    System.out.println("It's a byte array"); 
} 
관련 문제