繁体   English   中英

列表中的通用同类产品存在问题

[英]Trouble with a generic comparable in a list

我想让以下方法不显示有关使用原始类型的警告,但我无法弄清楚告诉它执行所需操作的语法。 这是当前方法:

static long countSplitInversions(List<? extends Comparable> list) {
    long inversions = 0;

    final int leftLimit = list.size() / 2;
    int left = 0;
    int right = leftLimit;

    for (int i = 0; i < list.size(); i++) {
        if (left == leftLimit || right == list.size()) {
            break;
        }
        if (list.get(left).compareTo(list.get(right)) <= 0) {
            left++;
        } else {
            right++;
            inversions += leftLimit - left;
        }
    }

    return inversions;
}

当我更改签名以避免警告到:

static <T> long countSplitInversions(List<? extends Comparable<? super T>> list)

那么compareTo所在的行将不会编译并显示错误:

Method compareTo in interface java.lang.Comparable<T> cannot be applied to given tyes
required: capture #1 of ? super T
found: java.lang.Comparable<? super T>

考虑将您的方法签名更改为类似...

static <T extends Comparable<? super T>> long countSplitInversions(List<T> list) {

您是警告还是编译器错误?

您当前的代码已经产生了警告,但是,如您在结尾处所建议的那样,如果您是指编译器错误,则需要为Comparable界限指定类型参数。

如您建议的那样,这样会产生编译器错误。

static long countSplitInversions(List<? extends Comparable<?>> list) {
 / /...
}

但这毫无意义,您不能对可比较的对象做任何事情。

这样,您可能需要为方法使用类型参数,如其他答案所建议的那样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM