int.class自动装箱到Class <Integer>

和你

我确定我的问题没有道理,但这是因为我不知道自己所看到的或如何描述...

以下代码可以很好地进行编译,但不应这样做,因为它int与的类型不同Integer这不应该给编译器错误吗?如果编译器期望Class<Integer>在运行时将其解析为Class<int>哪种类型?这是编译器允许其使用基元的某种魔术吗?并且如果编译器放松了对原语的验证,这不会导致错误的出现,方法编写者期望该类型为EXACT类型Class<Integer>而可以交付Class<int>

简而言之,为什么在运行时编译并产生corrector wrong(取决于透视图)结果。

public static void main(String[] args) {

    printClass("int     ", int.class);
    printClass("Integer ", Integer.class);
    System.out.printf("AreEqual", int.class == Integer.class);
}

private static void printClass(String text, final Class<Integer> klazz) {
    System.out.printf("%s: %s%s", text, klazz, "\n");
}

输出:

int     : int
Integer : class java.lang.Integer
AreEqual: false

对于对照组,此代码NOT COMPILE符合我的预期

public static void main(String[] args) {

    printClass("Person  ", Person.class);
    printClass("Employee", Employee.class);
    System.out.printf("AreEqual: %s", Person.class == Employee.class);
}

private static void printClass(String text, final Class<Person> klazz) {
    System.out.printf("%s: %s%s", text, klazz, "\n");
}


public class Employee extends Person {
}
public class Person {
}

错误:

Error:(8, 40) java: incompatible types: java.lang.Class<com.company.Employee> cannot be converted to java.lang.Class<com.company.Person>
格尔吉·巴索

您观察到的是泛型处理原语的直接结果,而不是自动装箱。为了在使用类信息(例如泛型或反射)的情况下保持一致,在某些情况下,原始类型在检查其类型时需要返回某些内容。

解引用时anyprimitivetype.class将返回封装的包装类TYPE字段。您的情况是:

 int.class -> public static final Class<Integer> TYPE

您可以在此处找到所有原始类型以及void:原始类型的完整列表。

从1.1开始,它们就是语言规范的一部分。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

新的int []是否自动装箱到新的Integer []?

来自分类Dev

为什么Java不会将int []自动装箱为Integer []

来自分类Dev

自动装箱无法将int转换为Integer

来自分类Dev

Java Integer自动自动装箱

来自分类Dev

Haskell:具有int签名的Integer到Int

来自分类Dev

从 int 到 java.lang.Long 的 java 自动装箱问题

来自分类Dev

从 int 到 class 的映射

来自分类Dev

泛型:为什么Class <Integer []> clazzIntArray = int []。class; 不起作用

来自分类Dev

Swift中的Int vs Integer

来自分类Dev

对每个集合使用Integer或int

来自分类Dev

关于自动装箱,Java中Map <Integer,Integer>的有效替代方案?

来自分类Dev

Java:将Int存储在Integer数组中

来自分类Dev

为什么构造Instance <Integer>而不是int

来自分类Dev

Java 8 Streams int和Integer

来自分类Dev

比较Java中的int和Integer

来自分类Dev

Autoboxing can't convert an int to an Integer

来自分类Dev

CodeChef TurboSort(使用int与Integer进行排序)

来自分类Dev

如何Integer.numberOfTrailingZero(int i)以工作?

来自分类Dev

Twitter API中的Int和Integer

来自分类Dev

int []和Integer []数组的内存占用量

来自分类Dev

Java 8 Streams int和Integer

来自分类Dev

将Integer类型分配给int

来自分类Dev

Java中的int * not Integer *类型的容器

来自分类Dev

为什么构造Instance <Integer>而不是int

来自分类Dev

检查变量是否为 int/Integer 类型

来自分类Dev

(int&Integer.MAX_VALUE)%int在Java中做什么?

来自分类Dev

如何将 (Integer, Int, Int ) 转换为 Day。无法将预期类型 'Day' 与实际类型 '(Integer, Int, Int)' 匹配

来自分类Dev

为什么不能使用公共静态<T,U> T [] copyOf(U [] original,int newLength,Class <?将Integer数组转换为String数组,扩展T []> newType)

来自分类Dev

从字符串“ -1”到类型“ Integer”的转换无效,但字符串值是有效的int

Related 相关文章

  1. 1

    新的int []是否自动装箱到新的Integer []?

  2. 2

    为什么Java不会将int []自动装箱为Integer []

  3. 3

    自动装箱无法将int转换为Integer

  4. 4

    Java Integer自动自动装箱

  5. 5

    Haskell:具有int签名的Integer到Int

  6. 6

    从 int 到 java.lang.Long 的 java 自动装箱问题

  7. 7

    从 int 到 class 的映射

  8. 8

    泛型:为什么Class <Integer []> clazzIntArray = int []。class; 不起作用

  9. 9

    Swift中的Int vs Integer

  10. 10

    对每个集合使用Integer或int

  11. 11

    关于自动装箱,Java中Map <Integer,Integer>的有效替代方案?

  12. 12

    Java:将Int存储在Integer数组中

  13. 13

    为什么构造Instance <Integer>而不是int

  14. 14

    Java 8 Streams int和Integer

  15. 15

    比较Java中的int和Integer

  16. 16

    Autoboxing can't convert an int to an Integer

  17. 17

    CodeChef TurboSort(使用int与Integer进行排序)

  18. 18

    如何Integer.numberOfTrailingZero(int i)以工作?

  19. 19

    Twitter API中的Int和Integer

  20. 20

    int []和Integer []数组的内存占用量

  21. 21

    Java 8 Streams int和Integer

  22. 22

    将Integer类型分配给int

  23. 23

    Java中的int * not Integer *类型的容器

  24. 24

    为什么构造Instance <Integer>而不是int

  25. 25

    检查变量是否为 int/Integer 类型

  26. 26

    (int&Integer.MAX_VALUE)%int在Java中做什么?

  27. 27

    如何将 (Integer, Int, Int ) 转换为 Day。无法将预期类型 'Day' 与实际类型 '(Integer, Int, Int)' 匹配

  28. 28

    为什么不能使用公共静态<T,U> T [] copyOf(U [] original,int newLength,Class <?将Integer数组转换为String数组,扩展T []> newType)

  29. 29

    从字符串“ -1”到类型“ Integer”的转换无效,但字符串值是有效的int

热门标签

归档