k593693666 2015-04-15 15:18 采纳率: 0%
浏览 3771

JAVA泛型,Comparable接口的泛型

背景:我现有两个类

 一个类是Employee implements Comparable<Employee>
 另一个是Manager extends Employee
 现在要写函数,在任意数组中找到最大和最小的存入Pair对象中
public static <T extends Comparable<T>> Pair<T> minmax(T[] a) {
        if(a == null || a.length != 0) {
            return null;
        }
        T min = a[0];
        T max = a[0];
        for(T aa:a) {
            if(aa.compareTo(min)<0) min = aa;
            if(aa.compareTo(max)>0) max = aa;
        }
        return new Pair<T>(min,max);
    }
        如果如下这么调用,就会报错,因为Manager继承Employee实现的是Employee的接口,因此在传参的时候不满足Manager extends Comparable<Manager>
        public static void minmaxBonus(Manager[] a,Pair<? super Manager> result) {
        minmax(a);
    }
        请教高手们,我该如何修改才能使得这么调用不报错呢。因为在学习泛型的使用,所以希望用泛型解决问题。不想要编译出警告的
  • 写回答

4条回答 默认 最新

  • threenewbee 2015-04-15 16:17
    关注

    我明白你的意思,Java不支持接口的逆变和协变,(JVM上的scala和.NET下的C#支持),从语言层面无解。
    你只能定义一个数组Employee[],将你的Manager[]挨个强制转换放进去。

    评论

报告相同问题?

悬赏问题

  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)