Кажется, что вы обычно реализовали интерфейс java.lang.Comparable
без указания параметра типа.Почему невозможно одновременно использовать Comparable <T>?
public abstract class Area implements Comparable {
@Override
public int compareTo(Object other) {
if (other instanceof Area)
return new Double(getArea()).compareTo(other.getArea());
return -1; // or something else
}
abstract public double getArea();
}
Поскольку я хочу сравнивать яблоки с яблоками, я думаю, было бы целесообразно указать тип.
public abstract class Area implements Comparable<Area> {
@Override
public int compareTo(Area other) {
// ...
Если я хочу представить еще один класс, чтобы сравнить Area
с, я думал, что я мог бы сделать следующее:
public abstract class Area implements Comparable<Area>, Comparable<Volume> {
@Override
public int compareTo(Area other) {
// ...
}
@Override
public int compareTo(Volume other) {
// ...
}
}
Но Java компилятор говорит мне:
Area.java:2: error: repeated interface
public abstract class Area implements Comparable<Area>, Comparable<Volume> {
^
Area.java:2: error: Comparable cannot be inherited with different arguments: <Area> and <Volume>
- Существуют ли какие-либо недостатки, указывающие аргумент типа для общего интерфейса?
- Почему Java не позволяет мне эту множественную реализацию?
Примечание: Я использую Java версии 1.7.0_45
Я думаю, что лучший вопрос: почему вы думаете, что это было бы полезно? И как будет 'newYork.compareTo (одиннадцать)' быть яблоками для яблок? :-) – haraldK