小编Soc*_*cke的帖子

Java泛型:为什么这个输出可能?

我有这门课:

class MyClass<N extends Number> {
    N n = (N) (new Integer(8));
}
Run Code Online (Sandbox Code Playgroud)

我想得到这些输出:

System.out.println(new MyClass<Long>().n);
System.out.println(new MyClass<Long>().n.getClass());
Run Code Online (Sandbox Code Playgroud)
  1. 第一项System.out.println()陈述的输出:

    8
    
    Run Code Online (Sandbox Code Playgroud)
  2. 输出第二个System.out.println()陈述:

    java.lang.ClassCastException: java.lang.Integer (in module: java.base)
        cannot be cast to java.lang.Long (in module: java.base)
    
    Run Code Online (Sandbox Code Playgroud)

为什么我得到第一个输出?是不是也有演员?为什么我在第二个输出中得到异常?

PS:我使用的是Java 9; 我用JShell尝试了它,我在两个输出上都有一个例外.然后我尝试使用IntelliJ IDE并获得第一个输出,但第二个输出异常.

java generics intellij-idea jshell

51
推荐指数
2
解决办法
2725
查看次数

标签 统计

generics ×1

intellij-idea ×1

java ×1

jshell ×1