JDK或公共基本库中是否有单个方法,如果类型是基元,基元包装器或字符串,则返回true?
即。
Class<?> type = ...
boolean isSimple = SomeUtil.isSimple( type );
对此类信息的需求可以是例如检查某些数据是否可以用JSON等格式表示。单个方法的原因是能够在表达式语言或模板中使用它。
答案 0 :(得分:17)
我找到了一些东西:
Commons Lang :(必须结合检查字符串)
ClassUtils.isPrimitiveOrWrapper()
BeanUtils.isSimpleValueType()
这就是我想要的,但是想在Commons中使用它。
答案 1 :(得分:13)
如果类型是基元
,是否有一个方法返回true
Class<?> type = ...;
if (type.isPrimitive()) { ... }
请注意,void.class.isPrimitive()
也是如此,这可能是您想要的也可能不是。
原始包装器?
不,但只有八个,所以你可以明确地检查它们:
if (type == Double.class || type == Float.class || type == Long.class ||
type == Integer.class || type == Short.class || type == Character.class ||
type == Byte.class || type == Boolean.class) { ... }
一个字符串?
简单地:
if (type == String.class) { ... }
这不是一种方法。我想在一种方法中确定它是否是其中一个名称或其他东西。
好。怎么样:
public static boolean isPrimitiveOrPrimitiveWrapperOrString(Class<?> type) {
return (type.isPrimitive() && type != void.class) ||
type == Double.class || type == Float.class || type == Long.class ||
type == Integer.class || type == Short.class || type == Character.class ||
type == Byte.class || type == Boolean.class || type == String.class;
}
答案 2 :(得分:2)
java.util.Class
类型有正确的方法:
Class<?> type = ...
boolean primitive = type.isPrimitive();
boolean string_ = type == String.class;
boolean array = type.isArray();
boolean enum_ = type.isEnum();
boolean interf_ = type.isInterface();
答案 3 :(得分:0)
番石榴为Primitives
类提供Primitives.isWrapperType(class)
,该类为true
,Integer
,...返回Long
。
答案 4 :(得分:-3)
整数,浮点数,字符等不是原始的;它们是包装类,用作基元的容器。它们是参考对象。真正的基元是类型,如int,float,double,long,byte,char和boolean - 非对象类型。这是一个很大的不同,因为
值instanceof Float
如果&#34;值&#34;甚至无法编译是一个原始的。 &#34;字符串&#34;也不是原始的 - 它是一种对象。 &#39;空&#39;也不是一个原始的 - 它是一个字面值。
答案 5 :(得分:-4)
不,没有。不应该。对于树差异问题,您应该提供树不同的答案。
public static <T> boolean isPrimitive(Class<T> klass) {
return klass.isPrimitive();
}
public static <T> boolean isString(Class<T> klass) {
return String.class == klass; //String is final therefor you can not extend it.
}
public static <T> boolean isPrimitiveWrapper(Class<T> klass) {
return Character.class == klass || Boolean.class == klass || klass.isAssignableFrom(Number.class);
}