当前位置: 首页 > 知识库问答 >
问题:

无法推断类的类型参数

余靖
2023-03-14

我的分类测试应用程序有一个问题,我使用了一个比较器。我收到一条信息:

线程“主”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);
}

这样用有什么错?我怎样才能做得更好?

共有2个答案

陶法
2023-03-14

为什么不使用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)));
}
端木震博
2023-03-14

在此行中:

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):状态请明确指定它。 我错过了什么? 这是代码

  • 这段代码适用于字符串和整数,但不适用于浮点。我想知道为什么? 这是课堂 这是主要方法