Java泛型通配符-协变与逆变

专业打酱油 发布于 2013/08/02 14:03
阅读 2K+
收藏 2

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

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

请不要用集合类好么?

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



加载中
0
南湖船老大
南湖船老大
有难度,这个貌似应该用scala来做
0
MZHS
MZHS
Java中有协变和逆变这个说法吗?能不能说的通俗点
0
南湖船老大
南湖船老大

引用来自“MZHS”的答案

Java中有协变和逆变这个说法吗?能不能说的通俗点
只要有泛型的概念,就有这个说法
0
U
UNJava
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
*////:~

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

返回顶部
顶部