Java 泛型、接口(interface)和类型约束

标签 java generics interface

<分区>

给定一个通用接口(interface):

public interface I<E> {
    public int interfaceMethod(E s);
}

和一个实现接口(interface)的泛型类

public class A<T> implements I<T> {

    private T val;

    public A(T x) {
        val = x;
    }

    public int interfaceMethod(T val) {
        // looks like T should be of the same type as instance variable 'val'
        return 0;
    }

}

为什么下面的工作?

public class Run {

    public static void main(String[] args) {

        A a = new A<String>("hello");

        System.out.println(a.interfaceMethod(100)); \\ returns 0
    }
}

我希望 class A 中定义的 interfaceMethod 方法的 T 类型参数将方法限制为具有相同类型的参数就像提供给 A 的构造函数一样。 (在本例中为 String)。

为什么 a.interfaceMethod 不需要 String 类型的参数?

最佳答案

发生这种情况是因为您忽略了警告“参数 a 的原始使用”(或类似的东西)

使用:

A<String> a = new A<String>("hello");

当忽略通用相关警告时,代码可能会在不应该编译的时候编译。

关于Java 泛型、接口(interface)和类型约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31243739/

相关文章:

java - 将 XML 转换为对象 xstream ( Android )

java - 如何在PeriodicSizeRotatingFileHandler JBoss 7中使用带有日期的文件名?

c# - 不同类型的列表列表

java - 泛型类型作为方法参数

javascript - Array.push 不是 ionic 4 Angular 中的函数问题

c# - 验证接口(interface)属性

java - 如何创建带圆角的 JButton 扩展?

java - 有没有办法使用 ftm 消息标签作为标题?

java - 如何指定字体属性的通用映射?

java - 如何编写带有参数的方法来实现 Java 中的接口(interface)