首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >确定对象是否为基元类型

确定对象是否为基元类型
EN

Stack Overflow用户
提问于 2009-04-02 14:36:28
回答 17查看 130.2K关注 0票数 125

我有一个Object[]数组,并且我正在尝试寻找那些是基本类型的数组。我试过使用Class.isPrimitive(),但似乎做错了什么:

代码语言:javascript
运行
复制
int i = 3;
Object o = i;

System.out.println(o.getClass().getName() + ", " +
                   o.getClass().isPrimitive());

打印java.lang.Integer, false

有没有正确的方法或其他选择?

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2009-04-02 14:40:23

Object[]中的类型永远不会是原始的--因为你已经有了引用!这里,i的类型是int,而o引用的对象类型是Integer (由于自动装箱)。

听起来你需要找出这个类型是否是“原语的包装器”。我不认为标准库中有任何内置的东西,但是很容易编写代码:

代码语言:javascript
运行
复制
import java.util.*;

public class Test
{
    public static void main(String[] args)        
    {
        System.out.println(isWrapperType(String.class));
        System.out.println(isWrapperType(Integer.class));
    }

    private static final Set<Class<?>> WRAPPER_TYPES = getWrapperTypes();

    public static boolean isWrapperType(Class<?> clazz)
    {
        return WRAPPER_TYPES.contains(clazz);
    }

    private static Set<Class<?>> getWrapperTypes()
    {
        Set<Class<?>> ret = new HashSet<Class<?>>();
        ret.add(Boolean.class);
        ret.add(Character.class);
        ret.add(Byte.class);
        ret.add(Short.class);
        ret.add(Integer.class);
        ret.add(Long.class);
        ret.add(Float.class);
        ret.add(Double.class);
        ret.add(Void.class);
        return ret;
    }
}
票数 172
EN

Stack Overflow用户

发布于 2010-09-30 22:21:51

commons-lang ClassUtils有相关的方法。

新版本有:

代码语言:javascript
运行
复制
boolean isPrimitiveOrWrapped = 
    ClassUtils.isPrimitiveOrWrapper(object.getClass());

老版本有wrapperToPrimitive(clazz)方法,它会返回原始的对应关系。

代码语言:javascript
运行
复制
boolean isPrimitiveOrWrapped = 
    clazz.isPrimitive() || ClassUtils.wrapperToPrimitive(clazz) != null;
票数 91
EN

Stack Overflow用户

发布于 2012-01-31 23:07:03

谷歌的Guava库有一个Primitives utility,可以检查一个类是否是一个原语的包装器类型:Primitives.isWrapperType(class)

Class.isPrimitive()适用于原语

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/709961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档