在继承层次结构中声明具有两个类型参数的方法的正确方法

时间:2013-11-04 10:42:43

标签: java generics covariance contravariance method-declaration

当编写一个带有两个对象的方法时,在子类型 - 超类型关系中有两个类型参数,从这些选项中声明你的意图的最佳方法是什么?

  1. 声明superextends

    public static <T> void copy(List<? super T> dst, List<? extends T> src) { ... }
    
  2. 仅声明extends

    public static <T> void copy(List<T> dst, List<? extends T> src) { ... }
    
  3. 仅声明super

    public static <T> void copy(List<? super T> dst, List<T> src) { ... }
    
  4. 根据我的理解,这三个都是正确的,并且彼此相同,因为你感兴趣的是dstsrc的类型参数的相对继承。哪个更好?

1 个答案:

答案 0 :(得分:1)

我认为扩展是最常见的,如果不需要同时使用,则不应该。所以我只选择延伸。

所以没有正确的方法,除非你有一个指定它的约定。