我的分类测试应用程序有一个问题,我使用了一个比较器。我收到一条信息:
线程“主”java.lang 中的异常:未解决的编译问题:无法推断排序器的类型参数
对于该代码:
public class TestClass {
public static void main(String[] args){
Sorter<Person> idSorter = new Sorter<>(new idComparator());
.
.
.
}
}
分拣机类:
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;
}
可比接口:
public interface Comparable {
public int compareTo(Comparable other);
}
id比较器类:
public class idComparator implements Comparator<Integer> {
public int compare(Integer first, Integer second) {
return first > second? 1: first == second? 0: 1;
}
}
比较器接口:
public interface Comparator<T> {
int compare(T first, T second);
}
这样用有什么错?我怎样才能做得更好?
为什么不使用Java8进行排序和比较?为了澄清,Lists.newArrayList是一个谷歌番石榴集合。
public void sortingEntitiesById() {
List<Person> persons = Lists.newArrayList(new Person("Sarah", 10), new Person("Jack", 12));
persons.sort((h1, h2) -> h1.getId().compareTo(h2.getId()));
Assert.assertThat(persons.get(0), equalTo(new Person("Sarah", 10)));
}
反向排序
public void sortingEntitiesByIdReversed() {
List<Person> persons = Lists.newArrayList(new Person("Sarah", 10), new Person("Jack", 12));
Comparator<Person> comparator = (h1, h2) -> h1.getId().compareTo(h2.getId());
persons.sort(comparator.reversed());
Assert.assertThat(persons.get(0), equalTo(new Person("Jack", 12)));
}
使用多个条件进行排序
public void sortEntitiesWithMultipleConditions() {
List<Person> persons = Lists.newArrayList(
new Person("Sarah", 12), new Person("Sarah", 10), new Person("Zack", 12));
persons.sort(Comparator.comparing(Person::getName).thenComparing(Person::getId));
Assert.assertThat(persons.get(0), equalTo(new Person("Sarah", 10)));
}
在此行中:
Sorter<Person> idSorter = new Sorter<>(new idComparator());
idCompator
实现比较器
可能的修复:
Sorter<Integer> idSorter = new Sorter<>(new idComparator());
但是正如一些人在评论中所说的,根据一些整数对人进行排序是很奇怪的。
另请注意:
< li >在< code>Sorter#compare
中(可能)缺少< code>return语句 < li>
idComparator
名称应以大写字母开头:< code>IdComparator < li >如果您真的想使用自己的< code > Comparable /< code > Comparator ,您应该用其他名称(< code>MyComparable)来命名它们?)< code>as is,与java的有些混淆。
我仍然在玩我的日历,我已经设法将 https://github.com/SundeepK/CompactCalendarView 整合到我的一个片段中。只剩下一个错误,我做了一些研究,其他人也遇到了问题,例如使用ArrayList 示例代码: IDE说: 注:C:...\Uebersicht.java使用或覆盖不推荐使用的API。注意:用-Xlint:deprecation重新编译以获得详细信息。
我需要 Kotlin 中的一个集合来仅包含实现给定接口的元素。 例如:包含动物集合的地图: 通过阅读文档、博客和SO问题,我编写了使用Generics in关键字的代码: 现在我想在Test类中添加一个读取“data”内容的方法,例如将其打印到控制台: 如果我这样做,我会遇到编译错误: 我的解决方案是强制我的动物进入一个ArrayList 但是我不确定这是编写这种代码的最好方式。有没有更好的方式告
我试着做一个ArrayList,包含另一个类的对象,一个名字,还有turn。类似于python字典的东西。 所以我做了一个有三个值的类。 我试图在主类的构造函数中调用它,如下所示: 但它引发了一个错误:无法推断ArrayList的类型参数
我想实现Spring endpoint,在其中我可以返回XML对象< code > notification echo response 和http状态代码。我试过这个: 但是我收到错误:
我使用一个密封类从网络返回数据。但是当我在构建这个项目时,我得到了以下错误 类型推断失败:没有足够的信息来推断参数T in fun error(错误消息:String,错误:Throwable):状态请明确指定它。 我错过了什么? 这是代码
这段代码适用于字符串和整数,但不适用于浮点。我想知道为什么? 这是课堂 这是主要方法