我正在嘗試編寫一個採用Class<?>
的Java函數,並返回一個表示對應的JavaScript類型的合理猜測的字符串。例如輸入/輸出:鑑於類<?>,我可以確定它是否具有特定類型的子類?
in | out
---------------------------------
String.class | "string"
int.class | "number"
double.class | "number"
Integer.class | "number"
Date.class | "date" (yes, I know that typeof new Date() === 'object')
boolean.class | "boolean"
Foo.class | "object"
這裏就是我這麼遠,它似乎主要工作:
String jsType(Class<?> clazz)
{
if (clazz.equals(String.class) return "string";
if (clazz.equals(boolean.class) return "boolean";
try
{
clazz.asSubclass(Number.class);
return "number";
}
catch (Exception e){}
try
{
clazz.asSubclass(Date.class);
return "date";
}
catch (Exception e){}
return "object";
}
然而,這並不正確返回「號碼」號原語,例如int.class
,double.class
等,儘管它對包裝類型正確工作,Integer.class
等。
- 對於原始類型的類文字是否有特別之處?
- 有沒有辦法寫這個函數的更好比一堆
if-else
陳述,對於我感興趣的每一個類?
+1,'isAssignableFrom()'絕對是一個進步。我仍然很想知道_why_ Number.class.isAssignableFrom(int.class)'returns' false' - 這應該是因爲'int'是原始的。 – 2010-12-17 00:24:09
用於提示'isAssignableFrom'。 – 2010-12-17 00:24:47
@Matt int是一個原始類型,不是對象類型層次結構的一部分。因此,它不能超出或低於任何東西(如數字)。 – ILMTitan 2010-12-17 15:37:12