java - 类型变量如何允许类型错误?

标签 java object generics upperbound type-variables

package org.my.java;

public class TestTypeVariable {

    static <T,A extends T> void typeVarType(T t, A a){
        System.out.println(a.getClass());
        System.out.println(t.getClass());
    }

    public static void main(String[] s){
        int i= 1;
        typeVarType("string", i);
    }
}

运行后输出如下:

class java.lang.Integer
class java.lang.String

A 的上界已经是 String 时,它怎么可能是 Integer 类型?

请解释一下。

最佳答案

这里有两件事:

  • 对于“错误的”输入有一个简单的解决方案:T 不是字符串而是对象Integer 扩展了 Object。但请注意:这仅适用于 Java8 的“增强型”类型推断功能。使用 Java7,您的输入将无法编译!
  • 您的误解:getClass() 发生在运行时,因此返回传递的对象的特定类 - 与编译器在编译时对泛型的看法无关时间。

关于java - 类型变量如何允许类型错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46400480/

相关文章:

javascript - 什么时候用对象,什么时候用数组

swift - 向扩展中的泛型参数添加约束

java - 通用与通配符未知类型

linux - 如何解决 "missing shared object"w/o root right

java - Java 中数组的不常见语法

java - ByteBuffer的初始 "mode"是什么?

java - 使动态创建的 AttributeDefImpl 在填充后只读

c# - 返回适当函数以处理参数化类型参数的通用方法

java - 开关只是继续

java - 在GUI中动态更新JTextArea