2010-08-02 4 views
3

Integer 또는 Long과 같은 클래스가 연관된 기본 유형을 가지고 있는지 여부를 쉽게 감지 할 수 있습니까? (예 : 각각 int와 long)클래스에 연관된 기본 유형이 있는지 확인

쉽게 클래스의 컬렉션을 유지 관리하고 해당 클래스가 컬렉션에 있는지 확인하는 것과 같은 것을 의미하지는 않습니다.

+0

이 질문을 살펴 보시기 바랍니다 .http : //stackoverflow.com/questions/709961/determining-if-an-object-is-of-primitive-type –

답변

3

쉽게 클래스 컬렉션을 유지 관리하고 해당 클래스가 컬렉션에 있는지 확인하는 것과 같은 것을 의미하지는 않습니다.

하지만 쉽습니다. Java는 기본 유형이 고정되어 있으며 (모두 기억해 보면 7 개입니다.) 각각 정확히 하나의 클래스에 해당합니다. 7 원소의 배열로 멤버쉽을 확인하는 것은 매우 빠르고 쉽습니다. Set에 넣고 O (1) 시간의 멤버쉽을 확인하는 데 사용할 수 있습니다. 나는 어떤 방법으로 더 빨리 될지 확실하지 않다.

Java에 내장 API (표준 API)가 있는지 여부를 묻는다면 그렇게 생각하지 않습니다. 그러나 만약 하나가 있다면, 아마도 그 요소 나 배열의 멤버쉽을 체크 할 것입니다.

+0

나는 다른 방법이 있다고 생각하지 않았다. 그리고 네, 저는 컬렉션을 유지하는 것이 쉽다는 것을 알고 있습니다. 그러나 저는이 세트를 유지 관리하는 사전 정의 된 클래스가 있는지 궁금합니다. 더 깨끗한 코드를 만듭니다. 하지만 내가 없다면 나는 내 자신의 컬렉션을 유지할 것입니다. 감사. – digiarnie

0

은 예, 쉽게 방법이 : 다음

public class ClassUtils { 
    private static final Set<Class<?>> wrapperClasses = new HashSet<Class<?>>(); 
    static { 
     wrapperClasses.add(Integer.class); 
     ... there are a set number of wrapper classes - add them all here 
    } 

, 도우미 메서드를 만듭니다

public static boolean isWrapperForPrimitive(Class<?> klass) { 
     return wrapperClasses.contains(klass); 
    } 
} 

역은 Class.isPrimitive() 매우 간단합니다 :

지정된 Class 객체가 프리미티브 유형을 나타내는 지 여부를 판별합니다.

8 개의 기본 유형과 void를 나타내는 9 개의 미리 정의 된 Class 객체가 있습니다. 이것들은 Java 가상 머신에 의해 작성되어 boolean, byte, char, short, int, long, float, 및 double 등이 나타내는 원시적 형과 같은 이름을가집니다.

이러한 개체는 다음 정적 static final 변수를 통해서만 액세스 할 수 있으며이 메서드가 true를 반환하는 유일한 Class 개체입니다.

+1

그건 그가 원하지 않는 방식입니다 : p – hhafez

관련 문제