2011-08-20 101 views
-1

我试图使用<E extends comparable <E>>创建一个接口ISortableStack,但我无法继续前进。以下是做什么的?Java - 递归泛型类型定义

<E extends Comparable<E>> 

我试过this,但它没有帮助。

+3

你的错误是什么,具体是什么? – Jeremy

+0

没有错误,我只是想知道如何使用通用编程创建接口 – Asphalt

+0

下一次,请正确设置您的问题的格式,并在提交之前使用预览检查一切正常。 –

回答

4

<E extends Comparable<E>>意味着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); 
    } 
} 
1

<>字符是“通用”语法的一部分。标准库充满了“通用”接口;以一个例子来看Setinterface

2

如果你问这是什么意思:

<E extends Comparable<E>> 

这意味着该类“E”传递必须实现Comparable接口。

+3

不止这些。传入的类“E”必须实现Comparable接口,并且Comparable的泛型参数必须为E本身。 – newacct