我的排序测试应用程序有问题,我在其中使用了比较器。我收到一条消息:
线程“main”中的异常 java.lang.Error:未解决的编译问题:无法推断 Sorter<> 的类型参数
对于该代码:
public class TestClass {
public static void main(String[] args){
Sorter<Person> idSorter = new Sorter<>(new idComparator());
.
.
.
}
}
Run Code Online (Sandbox Code Playgroud)
分拣机类:
public class Sorter<T extends Comparable> {
Comparator<T> comparator;
int switches = 0,
compares = 0;
public Sorter(Comparator<T> comparator) {
this.comparator = comparator;
}
public Sorter() {
this.comparator = null;
}
protected int compare(T first, T second) {
if (this.comparator == null) {
int cmp = first.compareTo(second);
this.compares++;
return cmp;
}
Run Code Online (Sandbox Code Playgroud)
比较界面:
public interface Comparable {
public int compareTo(Comparable other);
}
Run Code Online (Sandbox Code Playgroud)
idComparator 类:
public class idComparator implements Comparator<Integer> {
public int compare(Integer first, Integer second) {
return first > second? 1: first == second? 0: 1;
}
}
Run Code Online (Sandbox Code Playgroud)
比较器接口:
public interface Comparator<T> {
int compare(T first, T second);
}
Run Code Online (Sandbox Code Playgroud)
这样的用法有什么问题?我怎样才能做得更好?
小智 7
在这一行:
Sorter<Person> idSorter = new Sorter<>(new idComparator());
Run Code Online (Sandbox Code Playgroud)
idComparator实现Comparator<Integer>所以Tfor Sorteris Integer,但是您的声明向编译器指示Tis Person,因此编译器感到困惑并发出消息。
Sorter<Integer> idSorter = new Sorter<>(new idComparator());
Run Code Online (Sandbox Code Playgroud)
但正如一些人在评论中所说,根据某个整数对人进行排序很奇怪。
另请注意:
return说法是(可能)失踪Sorter#compareidComparator 名称应以大写字母开头: IdComparatorComparable/Comparator你应该用其他名字(MyComparable?)命名它们,as is与java的混淆。| 归档时间: |
|
| 查看次数: |
61859 次 |
| 最近记录: |