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

标签 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) { ... }
    

根据我的理解,这三个都是正确的,并且彼此等效,因为您感兴趣的是 dst 类型参数的相对继承。和src 。那么哪个更好呢?

最佳答案

我认为扩展是最常见的,如果不需要两者都使用,则不应使用。所以我只会选择扩展。

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

关于java - 在继承层次结构中声明具有两个类型参数的方法的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19766004/

相关文章:

C++:如何在协变返回类型中重用代码?

Java接口(interface)问题

java - 将两个数组合并为一个

java - 尝试对按各自顺序给定的字符串进行排序,无法使用集合

java - 正向回溯正则表达式

java - 使用泛型类访问其他类的其他方法

c# - 关于C#协方差的问题

java - 使用 Java 字符串格式生成不带前导零的可变大小数字

java - 使用泛型的泛型/系统架构的问题

java - monad 的一般情况可以在 java 6 中表达吗?