Java:如何确定type是否是primitive / wrapper / String或其他内容

时间:2014-07-30 14:11:53

标签: java types

JDK或公共基本库中是否有单个方法,如果类型是基元,基元包装器或字符串,则返回true?

即。

Class<?> type = ...
boolean isSimple = SomeUtil.isSimple( type );

对此类信息的需求可以是例如检查某些数据是否可以用JSON等格式表示。单个方法的原因是能够在表达式语言或模板中使用它。

6 个答案:

答案 0 :(得分:17)

我找到了一些东西:

Commons Lang :(必须结合检查字符串)

ClassUtils.isPrimitiveOrWrapper()

Spring

BeanUtils.isSimpleValueType()

这就是我想要的,但是想在Commons中使用它。

答案 1 :(得分:13)

  

如果类型是基元

,是否有一个方法返回true

Class.isPrimitive

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),该类为trueInteger,...返回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);

}