【问题标题】:How to convert Integer.class (and other boxed) to int.class (and other primitives)?如何将 Integer.class (和其他盒装)转换为 int.class (和其他原语)?
【发布时间】: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 stackoverflow.com/questions/22470985/integer-class-vs-int-class
  • 没有。您必须将自己的包装类 Map 制作为原始类型。
  • 当您说“将 Integer.class 转换为 int.class”时,恐怕您需要更清楚您的意思。你具体想做什么?注意,当你使用反射时,即使一个字段或方法参数是“int.class”类型的,你为该字段获取的值或通过反射传递给参数的值仍然是一个包装器(即Integer.class)跨度>

标签: java primitive-types


【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 2021-09-05
      相关资源
      最近更新 更多