java - 扩展泛型类型同时引入另一个类型参数

标签 java generics

我有一些代码无法使用 JDK10 编译。
我将其简化为下面的示例:

abstract class Base<C extends Comparable<C>> {
    C c;
    protected Base(C c) {
        this.c = c;
    }
}

class Derived<O extends Object> extends Base<String> {
    Derived(String s) {
        super(s);
    }
}

class Scratch {
    private static void printString(String s) {
        System.out.println(s);
    }

    public static void main(String[] args) {
        var d = new Derived("s");
        printString(d.c);
    }
}

当我打电话printString(d.c)时编译器提示 Error:(21, 22) incompatible types: java.lang.Comparable cannot be converted to java.lang.String .

如果我改变
class Derived<O extends Object> extends Base<String> {

class Derived extends Base<String> {
代码按预期工作。

如何修复代码(以便 d.c 的类型为 java.lang.String ),同时保留类型参数 O关于Derived类型?

最佳答案

当您声明class Derived<O extends Object>时但然后将其初始化为 new Derived ,它变成原始类型,杀死所有泛型。要修复它,请使用 new Derived<Object> 对其进行初始化或new Derived<String>或者其他东西。

关于java - 扩展泛型类型同时引入另一个类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52618886/

相关文章:

java - 从 Maven 中的测试资源复制空目录

java - JDK 与 Android SDK (ASDK)?

Java泛型类构造函数调用

c# - 用抽象类型实现抽象类

c# - 在 C# 中遍历泛型列表

java - 如何控制嵌套在 JtabbedPane 中的面板?

Java 最终 setter/getter

java - Java 的 Stackify 前缀

java - 从扩展泛型中提取泛型类型

generics - 如何以通用方式定义向量(或迭代器)的总和?