我正在尝试编写一个Java函数,它接受一个
然而,它无法正确返回数字原语类型的“number”,例如
Class<?>
并返回一个字符串,该字符串代表对应的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";
}
然而,它无法正确返回数字原语类型的“number”,例如
int.class
,double.class
等,尽管对于包装类型Integer.class
等,它确实可以正常工作。
- 原始类型的类字面量有什么特殊之处吗?
- 是否有一种比为每个我感兴趣的类编写一堆
if-else
语句更好的方法来编写此函数?
if-else
语句之外的其他东西。 - Matt Ballboolean
,然后仅检查isPrimitive()
来合并原始数字类型的检查。对于非原始类型,如果你真的想要,可以使用哈希映射将Java类名映射到JavaScript类型。但我认为你无法完全避免if-then-else。 - davmac