2010-08-02 63 views
3

是否有一種簡單的方法來檢測諸如Integer或Long之類是否具有關聯的基元類型? (例如分別爲int和long)檢查一個類是否具有關聯的基元類型

而且容易,我不是說像維護類的集合並檢查該類是否存在於集合中。

+0

請看看這個問題..http://stackoverflow.com/questions/709961/determining-if-an-object-is-of-primitive-type – 2010-08-02 04:54:24

回答

3

而且容易,我不是說像維護一個類的集合,並檢查該類是否在集合中生活的東西。

但這很容易。 Java擁有固定數量的基本類型(如果我將它們全部記住,則爲7),並且每個對應於一個類。檢查7個元素數組的成員資格非常快捷,或者您可以將它們放在Set中,並使用它檢查O(1)時間的成員身份。我不敢肯定哪種方法會更快。

如果你問是否Java有一個內置方法(在標準API中)來做到這一點,我不這麼認爲。但如果有一個,它可能會檢查該組或7個元素的數組中的成員資格。

+0

我不認爲有另一種方式。是的,我知道保持一個集合很容易,但我只是想知道是否有一個預先定義的類,爲我保持這套。使代碼更簡潔。但如果沒有,我會繼續保持自己的收藏。謝謝。 – digiarnie 2010-08-02 05:05:35

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對象是否表示基本類型。

有九個預定義的Class對象來表示八種基本類型和void。這些由Java虛擬機創建,並且與它們表示的基本類型具有相同的名稱,即布爾型,字節型,字符型,短型,整型,長型,浮點型和雙精度型。

這些對象只能通過以下公共靜態最終變量訪問,並且是此方法返回true的唯一Class對象。

+1

這是他說他不想做的方法:p – hhafez 2010-08-02 05:34:38

相關問題