【问题标题】:Java type parameter is not within its boundJava 类型参数不在其范围内
【发布时间】:2015-05-09 12:08:59
【问题描述】:

我有一个 Zeitpunkt 类,它实现了一个带时间的日期,另外还有一个表示二叉搜索树的类 Suchbaum。

我想在 Suchbaum 中使用 Comparator-Object 按 Zeitpunkt 的日期对树进行排序,但是当我想创建一个suchbaum 对象时,它会打印出命名错误。

Zeipunkt

public class Zeitpunkt<T> implements Comparable<T>
{
private int jahr;
private int monat;
private int tag;
private int stunden;
private int minuten;
private double sekunden;

public int vergleich(Zeitpunkt a) { ... }

@Override
public int compareTo(T o) {
    if(o instanceof Zeitpunkt)
        return vergleich((Zeitpunkt)o);
    return 0;
}
...
}

苏克鲍姆

public class Suchbaum<T extends Comparable<T>> {
private class Element {
    private T daten;
    private Element links;
    private Element rechts;

    public Element(T t) {
        daten = t;
        links = null;
        rechts = null;
    }
}
private Element wurzel;
private Comparator<T> comp;
...
}

测试类

public class BaumTest {
public static void main(String[] args) {

// error in the following line (IntelliJ underlines the first 
// "Zeitpunkt"). Suchbaum<Zeitpunkt<?>> = ... doesn't work either..
// *Completely confused*
Suchbaum<Zeitpunkt> sb = new Suchbaum<>((Zeitpunkt z1, Zeitpunkt z2) -> {
        if(z1.getTag() > z2.getTag())
            return 1;
        else if(z1.getTag() == z2.getTag())
            return 0;
        else
            return -1;
    });
}
}

有什么想法吗? (这个主题的其他线程没有帮助我)

【问题讨论】:

  • 尝试在代码中使用英文名称;这是一个普遍的好习惯,因为它可以让更多人帮助和/或理解您的代码。

标签: java generics comparator comparable


【解决方案1】:

似乎你不想让你的Zeitpunkt 类参数化,你只想让它实现Comparable 接口。所以改成这样:

public class Zeitpunkt implements Comparable<Zeitpunkt> {
    private int jahr;
    private int monat;
    private int tag;
    private int stunden;
    private int minuten;
    private double sekunden;

    public int vergleich(Zeitpunkt a) {
        return 0;
    }

    @Override
    public int compareTo(Zeitpunkt o) {
        return vergleich(o);
    }
}

您还需要在 Suchbaum 类中定义一个构造函数:

public Suchbaum(Comparator<T> comp) {
    this.comp = comp;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-22
    • 2021-07-17
    • 2019-03-25
    • 1970-01-01
    • 2015-03-22
    • 2011-05-24
    • 1970-01-01
    • 2015-06-24
    相关资源
    最近更新 更多