开发者社区> 问答> 正文

Java泛型通配符-协变与逆变:报错

创建一个泛型类Generic1<T>,它只有一个方法,将接受一个T类型的参数。创建第二个泛型类Generic2<T>,它也只有一个方法,将返回类型T的参数。编写一个泛型方法,它具有一个调用第一个泛型类的方法的逆变参数。编写第二个泛型方法,它具有一个调用第二个泛型类的方法的协变参数。

根据语义可知,要写2个泛型方法,一个有逆变参数 super,另一个有协变参数 extends,那么,请问如何写?

请不要用集合类好么?

请在方法1,2中直接调用Generic1<T>,Generic2<T>的方法好么?



展开
收起
kun坤 2020-06-09 22:18:08 436 0
1 条回答
写回答
取消 提交回答
  • 有难度,这个貌似应该用scala来做######Java中有协变和逆变这个说法吗?能不能说的通俗点######

    引用来自“MZHS”的答案

    Java中有协变和逆变这个说法吗?能不能说的通俗点
    只要有泛型的概念,就有这个说法
    ######
    import typeinfo.pets.*;
    import java.util.*;
    
    class Generic1<T> {
      public void method(T t) {
        System.out.println(t.toString());
      }
    }
    
    class Generic2<T> {
      T t;
      Generic2(T t){ this.t = t; }
      public T method() {
        return t;
      }
    }
    
    public class Question28 {
      public <T> void method1(Generic1<? super T> gen, T t) {
        gen.method(t);
      }
      public <T> void method2(Generic2<? extends T> gen, T t) {
        gen.method();
      }
      public static void main(String[] args) {
        Question28 q = new Question28();
        q.method1(new Generic1<Pet>(),new Dog());
        q.method2(new Generic2<Dog>(new Dog()),new Pet());
      }
    }/* Output:
    Dog
    *////:~

    这是我的代码,不一定对,“具有一个调用第一个泛型类的方法的逆变参数”这句话不知道怎么理解,咱们共同探讨。

    2020-06-09 22:18:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载