为什么这个泛型引用不能指向Java中的类似扩展类?

海鸥

为什么这个泛型引用不能指向Java中的类似扩展类?

http://goo.gl/evqOcP

public class HelloWorld{

    public static void main(String []args){

        Interface<Integer,Object> test = new Test();

        System.out.println(test.method(test));
    }
}


public interface Interface<A, B extends Object> {
    public A method(B param);
}

public class Test implements Interface<Integer,Test> {
    private int a = 0;

    public Integer method(Test param){
        return param.a;
    }
}

编译时出现此错误

HelloWorld.java:5: error: incompatible types                                                                                                                         
        Interface<Integer,Object> test = new Test();                                                                                                                 
                                         ^                                                                                                                           
  required: Interface<Integer,Object>                                                                                                                                
  found:    Test                                                                                                                                                     
1 error  
Debojit Saikia

该类Test实现Interface<Integer,Test>,并且类型声明为Interface<Integer,Object>不允许这种分配,因为泛型是invariant

Interface<Integer,Test>既不是的子类型也不是的超类型Interface<Integer,Object>因此,Interface<Integer,Test>无法分配给Interface<Integer,Object>

您可以按以下方式更改赋值语句以使其起作用:

Interface<Integer, ? extends Test> test = new Test();

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java 中的泛型 - 为什么我不能做 Comparable<? 扩展 T> 而不是 Comparable<? 超级T>?

为什么不能将从另一个泛型类扩展的类作为泛型类传递?

在Java中,为什么不能在泛型类上使用构造函数?

为什么我不能在Java中抛出或捕获泛型类的实例?

在java中扩展多个类的泛型

为什么我们不能扩展泛型?

为什么泛型类可以扩展类型形状?

为什么不能使用显式泛型参数调用泛型扩展方法?

为什么我不能从我用泛型创建的类中调用方法?爪哇

Java 泛型:为什么这个嵌套模板会失败?

为什么我不能创建泛型类的泛型 arraylist 成员?

为什么不能将Objects数组转换为泛型类的泛型子类的数组?

为什么我不能在 java java.lang.Enum 泛型类型定义中重现?

为什么 Java 泛型不能用于静态方法?

为什么实现接口的类中的泛型成员函数不能采用类(而不是接口)类型的参数?

为什么在Java泛型中List <Integer>是List <的子类型?扩展整数>?

为什么不能将这个泛型用作看似相同的范围的参数?

Typescript 泛型抽象类 - 为什么这个抽象方法不继承类类型?

TypeScript:类的泛型-类似于Java的Class <T扩展Foo>

为什么父类的泛型类型在子类中忽略?

在Java中,常规泛型不能做什么通配符?

如何正确创建在Java中扩展泛型接口的有界泛型类

为什么这个泛型类型不擦除到指定类

为什么这个复杂的泛型示例不能用 Java 7 编译(但可以用 Java 8),我该如何解决它?

具有泛型的类,将其自身引用为Java中该泛型的类型

Java:使用泛型扩展类

扩展并扩展了Java中泛型的组合

为什么指向非const成员函数的指针不能指向const成员函数而相反呢?

Kotlin中泛型类的扩展功能