java - 如何使用泛型类型实现接口(interface)?

标签 java generics interface comparator

我正在尝试编写一个类 TelemeterTester,它实现 Telemeter 类。遥测仪扩展了比较器。我不断收到此运行时错误...

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 接口(interface)的代码

/** @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);
   }

}

谁能向我解释一下我做错了什么?我不太了解泛型,并且我已经被这个错误的变体困扰了几个小时。

最佳答案

您的 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>

关于java - 如何使用泛型类型实现接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24074366/

相关文章:

Java JPA 外键引用未保存

java - 如何使用亚马逊java库实现AWS签名请求?

c# - 可以将两个重载方法变成单个方法

c# - 覆盖派生类中的构造函数,由父类(super class)的接口(interface)定义

java - 循环尝试删除 Firebase 数据库上的帐户

java - 以编程方式清除 Java\CPU 缓存

c# 对静态函数的泛型方法调用

arrays - 使用 Zip2 进行 Swift 数组扩展

接口(interface)中的 Kotlin 内联函数

delphi - 存储 Delphi 接口(interface)引用时出现奇怪的 AV