2014-01-20 58 views
0

這裏是我想實現的函數簽名。如何測試對象是基本類型還是Java中的基本類型數組?

public boolean isBaseTypeOrArray(Object obj){~} 

我想僅當obj具有下列其中一種類型時才返回true。

boolean or boolean[] 
byte or byte[] 
short or short[] 
int or int[] 
long or long[] 
float or float[] 
double or double[] 
char or char[] 
java.lang.String or String[] 

對於一個孤獨的值進行覈對,如果它是包裝類的一個實例(整數,浮點數,...)或字符串應該工作,因爲汽車拳,但我不知道如何檢查數組案件。有任何想法嗎?

+0

類型這將如何被使用,爲什麼? –

+4

您將無法確定參數是否爲原始參數,因爲它將自動複製到對象類型。您將不得不爲原始類型創建單獨的方法。 – Pshemo

+1

http://stackoverflow.com/questions/709961/determining-if-an-object-is-of-primitive-type –

回答

4

我想,你應該動態獲取和測試值的類描述:

if (obj.getClass().equals(Boolean.class)) { 
    //... 
} 
//... 
if (obj.getClass().equals(boolean[].class)) { 
    //... 
} 
//... 
if (obj.getClass().equals(String.class)) { 
    //... 
} 
2

你可以嘗試這樣的

public static void main(String[] args) { 
    System.out.println(isBaseTypeOrArray(new int[5])); 
} 

public static boolean isBaseTypeOrArray(Object obj){ 
    return (obj.getClass().getComponentType().equals(int.class)|| 
      obj.getClass().getComponentType().equals(byte.class)); 
} 
+0

他接受一個對象作爲參數,所以它不能是一個原始類型的值。 –

+0

你會如何測試它是否是一個int數組?例如。 –

+0

@ɭɘɖɵʊɒɼɖ江戸,我已經在我的回答中寫過如何測試它是否是一個數組。 –

5

一些測試,如果對象是數組剛剛獲得同級車並使用isArray()
要獲取元素數組的類型可以使用getComponentType()
要測試類型是否爲原始類型,可以使用isPrimitive()
如果你想檢查類型是否像String類一樣使用equals(String.class)

反正這應該與從你的問題

public static boolean isBaseTypeOrArray(Object obj) { 
    Class<?> c = obj.getClass(); 
    return c.equals(String.class) || c.equals(String[].class) || 
      c.isArray() && c.getComponentType().isPrimitive(); 
} 
public static boolean isBaseTypeOrArray(byte obj) {return true;} 
public static boolean isBaseTypeOrArray(short obj) {return true;} 
public static boolean isBaseTypeOrArray(char obj) {return true;} 
public static boolean isBaseTypeOrArray(int obj) {return true;} 
public static boolean isBaseTypeOrArray(long obj) {return true;} 
public static boolean isBaseTypeOrArray(float obj) {return true;} 
public static boolean isBaseTypeOrArray(double obj) {return true;} 
public static boolean isBaseTypeOrArray(boolean obj) {return true;} 
相關問題