java - 确定对象是否为原始类型

标签 java reflection

我有一个 Object[] 数组,我正试图找到那些是原语的。我尝试使用 Class.isPrimitive(),但似乎我做错了什么:

int i = 3;
Object o = i;

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

打印 java.lang.Integer, false.

有没有正确的方法或替代方法?

最佳答案

Object[] 中的类型永远不会真正是原始的 - 因为你有引用!这里 i 的类型是 into 引用的对象的类型是 Integer (由于 auto -拳击)。

听起来您需要确定该类型是否是“原始包装器”。我认为标准库中没有为此内置任何内容,但编写代码很容易:

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;
    }
}

关于java - 确定对象是否为原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/709961/

相关文章:

java - 在java中使用分数

java反射 - 如何获取特定属性的名称

c# - 如何使用反射对 Dispose() 进行单元测试?

.net - 如何通过反射获取某个 ValueType 的 MinValue/MaxValue?

java - 来自 Apache Commons Exec 的进程对象

java - ChangeHandler 无法识别空白日期

c# - 应用程序在运行时更改语言

java - 如何获取自定义类对象的java.lang.Type对象?

java - 无法从 Firebase 检索信息到自定义 ListView Android

java - 如何在 Android 中绘制自定义图形?