如何将 Integer.class (和其他盒装)转换为 int.class (和其他原语)?
Posted
技术标签:
【中文标题】如何将 Integer.class (和其他盒装)转换为 int.class (和其他原语)?【英文标题】:How to convert Integer.class (and other boxed) to int.class (and other primitives)? 【发布时间】:2020-10-29 13:32:33 【问题描述】:有没有办法将Integer.class
转换为int.class
等其他原始类型?
类似:
jshell> Boolean.class.isPrimitive()
$1 ==> false
jshell> Boolean.class.asPrimitive() == boolean.class
$2 ==> true
【问题讨论】:
第一件事int
不是一个类,它是一个原语,java 将使用称为自动装箱和拆箱的概念自动转换它
我在问int.class
这是一个Class
这会让你明白什么是 Integer.class
和 int.class
***.com/questions/22470985/integer-class-vs-int-class
没有。您必须将自己的包装类 Map
制作为原始类型。
当您说“将 Integer.class 转换为 int.class”时,恐怕您需要更清楚您的意思。你具体想做什么?注意,当你使用反射时,即使一个字段或方法参数是“int.class”类型的,你为该字段获取的值或通过反射传递给参数的值仍然是一个包装器(即Integer.class)跨度>
【参考方案1】:
使用来自commons-lang 的ClassUtils
可以做到这一点:
jshell> import org.apache.commons.lang3.ClassUtils
jshell> ClassUtils.primitiveToWrapper(int.class)
$1 ==> class java.lang.Integer
jshell> ClassUtils.wrapperToPrimitive(Float.class)
$2 ==> float
【讨论】:
【参考方案2】:它没有Java SE方法,但是很容易保持一个Map:
private static final Map<Class<?>, Class<?>> wrapperToPrimitive = Map.of(
Void.class, void.class,
Boolean.class, boolean.class,
Byte.class, byte.class,
Character.class, char.class,
Short.class, short.class,
Integer.class, int.class,
Long.class, long.class,
Float.class, float.class,
Double.class, double.class);
【讨论】:
以上是关于如何将 Integer.class (和其他盒装)转换为 int.class (和其他原语)?的主要内容,如果未能解决你的问题,请参考以下文章