【问题标题】:Java - recursive generic type definitionsJava - 递归泛型类型定义
【发布时间】:2011-08-20 12:22:08
【问题描述】:

我尝试使用<E extends comparable <E>> 创建一个接口ISortableStack,但我无法继续前进。以下是做什么的?

<E extends Comparable<E>> 

我试过this,但没有用。

【问题讨论】:

  • 你的错误是什么?
  • 没有错误,我只是想知道如何用泛型编程创建接口
  • 下次请正确格式化您的问题,并在提交前使用预览检查一切正常。
  • 阅读有关泛型的 Java 教程。如果没有更具体的问题,我们将无法给您更具体的答案。 download.oracle.com/javase/tutorial/java/generics/index.html
  • @Asphalt 所以你想创建一个通用接口。它有什么问题?为什么你不能这样做?请尝试解释您的问题。

标签: java generics interface


【解决方案1】:

&lt;E extends Comparable&lt;E&gt;&gt; 意味着E 必须是一个知道如何与自身进行比较的类型,因此是递归类型定义。

public class Comparables {

  static class User implements Comparable<User> {
    @Override
    public int compareTo(User user) {
      return 0;
    }
  }

  /**
   * This class cannot be used with Collections.sort because an
   * UncomparableUser is not comparable with itself. However, notice
   * that you get no compiler error just for implementing
   * Comparable<String>.
   */
  static class UncomparableUser implements Comparable<String> {
    @Override
    public int compareTo(String user) {
      return 0;
    }
  }

  public static void main(String[] args) {
    List<User> users = Arrays.asList(new User());

    // Using this would cause a compiler error
    // List<UncomparableUser> users = Arrays.asList(new UncomparableUser());

    Collections.sort(users);
  }
}

【讨论】:

    【解决方案2】:

    如果你问这是什么意思:

    <E extends Comparable<E>> 
    

    表示传入的类'E'必须实现Comparable接口。

    【讨论】:

    • 不仅如此。传入的类'E'必须实现Comparable接口,Comparable的泛型参数必须是E本身。
    【解决方案3】:

    &lt;&gt; 字符是“通用”语法的一部分。标准库充满了“通用”接口;以Set interface 为例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 2020-10-18
      • 2012-11-08
      • 1970-01-01
      • 2012-08-15
      相关资源
      最近更新 更多