我是java的新手。我只是想将Comparable<String>
传递给泛型类型<E extends Comparable<E>>
的方法参数。我相信<E extends Comparable<E>>
的含义是任何扩展Comparable
的对象。请告诉我如何传递Comparable<String>
或任何扩展Comparable<String>
并且其中包含其他对象的对象。
编译器给我错误The inferred type Compare<String> is not a valid substitute for the bounded parameter <E extends Comparable<E>>
public class Compare<T> implements Comparable<T>{
public int compareTo(T o) {
return 0; // Not worried about logic
}
}
class CompareTest{
public <E extends Comparable<E>>void testGeneric(E e){
System.out.println("Executed");
}
public static void main(String args[]){
Compare<String> compare = new Compare<String>();
CompareTest test = new CompareTest();
test.testGeneric(compare);
//The inferred type Compare<String> is not a valid substitute for the bounded
//parameter <E extends Comparable<E>>
}
}
答案 0 :(得分:3)
E extends Comparable<E>
表示:类型E能够与相同类型E的其他对象进行比较。
但您的比较类型不符合条件。它无法与另一个比较比较。 Compare<T>
只能与T
进行比较,而不能与Compare<T>
进行比较,因为它被声明为
public class Compare<T> implements Comparable<T>
使用此比较类型很难理解您想要实现的目标。
答案 1 :(得分:2)
你的方法
public <E extends Comparable<E>> void testGeneric(E e){
期望类型E
是Comparable<E>
的子类型。但是,您传递的是Compare<String>
,它不是<Comparable<Compare<String>>
的子类型,而是Comparable<String>
的子类型。
如果您需要更多帮助,您必须澄清您要做的事情。
答案 2 :(得分:1)
我的IDE中的错误说:
Inferred type 'Compare<java.lang.String>' for type parameter 'E' is not within its bound;
should implement 'java.lang.Comparable<Compare<java.lang.String>>'
似乎E
被推断为Compare<String>
而不是String
。要让E
成为String
,请尝试以下操作:
public <E extends Comparable<E>> void testGeneric(Comparable<E> e){
答案 3 :(得分:1)
要将类定义为可比较,Comparable
的泛型参数必须是类本身:
public class MyComparable implements Comparable<MyComparable> {
public int compareTo(MyComparable o) {
return 0;
}
}
将它应用于您的班级,您将获得以下代码(编译):
public static class Compare<T> implements Comparable<Compare<T>> {
public int compareTo(Compare<T> o) {
return 0; // Not worried about logic
}
}
class CompareTest {
public <E extends Comparable<E>> void testGeneric(E e) {
System.out.println("Executed");
}
}
public static void main(String[] args) {
Compare<String> compare = new Compare<String>();
CompareTest test = new CompareTest();
test.testGeneric(compare);
}