Java泛型,类型变量范围

时间:2013-03-26 10:55:00

标签: java generics compareto

有什么区别:

public <E>int  compareTo(E e) // first line (compilation error)

public int compareTo(E e) // second line (OK)

仅在第二行我通过编译器。这是否意味着需要确保该特定元素在类中被普遍声明? 否则你可以放入任何元素并且没有多大意义。我是以正确的方式看到它的吗?提前谢谢。

2 个答案:

答案 0 :(得分:2)

将类型参数声明放在返回类型之前:

public <E> int compareTo(E e) 

您也可以拥有类级别<E>类型参数,但方法级别参数会将其隐藏。请在this question中了解详情。

答案 1 :(得分:0)

public <E extends String> int compareTo(E o) {  //1
}

根据您的编程需要,您可以考虑使用任何类而不是String

以上场景考虑用于实现Comparable接口的类。

class SimpleClass<E> {  // 2
    E var;  
    public <E> int compareTo(E o) {         
        return 0;
    }
}
如果我们不实现Comparable接口,

在// 2上面的类将起作用。 E 无需扩展String(任何其他类)。