我正在尝试编写一个实现Telemeter类的TelemeterTester类。遥测仪扩展了比较器。我一直收到这个运行时错误...
TelemeterTester.java:12: error: cannot find symbol
return e1.compareTo(e2);
^
symbol: method compareTo(Comparable)
location: variable e1 of type Comparable
where Comparable is a type-variable:
Comparable extends Object declared in class TelemeterTester
1 error
以下是Telemeter接口的代码
/** @param <E> the type on which distance and order are defined
*
*/
public interface Telemeter<E> extends Comparator<E> {
/**
* Returns the distance between e1 and e2.
*
* @param e1 the first object
* @param e2 the second object
* @return the distance between e1 and e2
*
*/
double distance(E e1, E e2);
}
这是我的TelemeterTester类的代码,它实现了Telemeter
public class TelemeterTester<Comparable> implements Telemeter<Comparable>{
private TelemeterTester() {}
public double distance(Comparable e1, Comparable e2) {
return 0;
}
public int compare(Comparable e1, Comparable e2) {
return e1.compareTo(e2);
}
}
任何人都可以向我解释我做错了什么吗?我不太了解泛型,现在我已经被困在这个错误的变化上几个小时了。
答案 0 :(得分:2)
这里的语法
public class TelemeterTester<Comparable> implements Telemeter<Comparable>{
就像
一样public interface Telemeter<E> extends Comparator<E> {
声明一个名为Comparable
的类型参数,就像第二个声明一个名为E
的类型参数一样。它没有使用Comparable
作为类型参数。因此,这种方法
public int compare(Comparable e1, Comparable e2) {
return e1.compareTo(e2);
}
为其参数使用无界类型。无界类型基本上为Object
,而Object
未声明compareTo(..)
方法。
你应该阅读
继续之前。
答案 1 :(得分:2)
您的TelemeterTester应定义如下:
public class TelemeterTester<E extends Comparable<E>> implements Telemeter<E> {
private TelemeterTester() {
}
public int compare(E o1, E o2) {
return o1.compareTo(o2);
}
@Override
public double distance(E e1, E e2) {
return 0;
}
}
并称为:
TelemeterTester<Integer> t = new TelemeterTester<Integer>();
System.out.println(t.compare(2, 2));
记住类型Integer实现Comparable<Integer>
答案 2 :(得分:0)
&#34;任何人都可以向我解释我做错了什么?&#34; 您的测试仪属于Comparable类型,它扩展了Telemeter,它也是Comparable类型。
您真正想要的是测试扩展了一个通用对象,我们通常将其命名为E,并且您希望此对象扩展Es的类Comparable。例如,如果用E替换E,则更有意义:
公共类TelemeterTester&gt;实施遥测仪
&#34;我不太了解仿制药,而且我已经被困在这个错误的变化上几个小时了。&#34;
Josh Bloch在Youtube上有很棒的视频,他解释了PECS :)一旦你看到它就会有意义。
https://www.youtube.com/watch?v=V1vQf4qyMXg
您的代码应如下所示:
import java.util.*;
/** @param <E> the type on which distance and order are defined
*
*/
interface Telemeter<E> extends Comparator<E> {
/**
* Returns the distance between e1 and e2.
*
* @param e1 the first object
* @param e2 the second object
* @return the distance between e1 and e2
*
*/
double distance(E e1, E e2);
}
class TelemeterTester<E extends Comparable<E>> implements Telemeter<E> {
private TelemeterTester() {}
@Override
public int compare(E o1, E o2)
{
// TODO Auto-generated method stub
return 0;
}
@Override
public double distance(E e1, E e2)
{
// TODO Auto-generated method stub
return 0;
}
}
用您自己的代码替换TODO。