Java 如何编写一个通用方法来查找最大元素并调用该方法?

Java 如何编写一个通用方法来查找最大元素并调用该方法?,java,list,generics,Java,List,Generics,当我试图解决这个练习时,我的答案略有不同 我的答案 public static <T extends Comparable<? super T>> T max(List<? extends T> list, int begin, int end) //Option1 public static <T extends Comparable<T>> T max(List<? extends T> list, i

当我试图解决这个练习时,我的答案略有不同

我的答案

public static <T extends Comparable<? super T>>
    T max(List<? extends T> list, int begin, int end) //Option1

public static <T extends Comparable<T>>
    T max(List<? extends T> list, int begin, int end) //Option2

如果
compariable看起来通配符比需要的多,会有什么不同吗。我可能会和你一起去

public static <T extends Comparable<? super T>>
    T max(List<T> list, int begin, int end)

富无论如何都没有意义;一个可比的人只能有意义地与自己的同类进行比较。条款
C扩展了可比性
承认了这一事实。

这里部分回答了:我真的不理解你的第三个问题。您能详细说明一下吗?eclipse为哪个方法调用创建了该局部变量?我不明白为什么会这样。至少嵌套的可比较泛型类型在这里是不合理的。我想我已经为你的第三个问题添加了答案。您可以在那里查看
父项
子项
代码。我想这就是你想要的。@RohitJain当你键入
max(列表,1,10)时,eclipse会插入它并执行ctrl1,然后选择“创建局部变量列表”。是的,您已经回答了(谢谢:)。当eclipse创建那个冗长的声明时,我有点困惑——删除一个方法只会对输入参数类型产生影响,而不会对返回类型产生影响,
对象
绑定对输入参数类型没有影响:它仍然是
max(List,int,int)
对象
在这里确实是不必要的。@LouisWasserman。嗯,第一眼我也这么想,然后我读了我在最后添加的链接。这是说它对保持字节码兼容性是必要的。@RohitJain实际上
max(列表,0,2)可以很好地编译。但是
Child=max(列表,0,2)无法编译。
class Parent implements Comparable<Parent> {
    protected String name;

    @Override
    public int compareTo(Parent o) {
        return this.name.compareTo(o.name);
    }
}

class Child extends Parent {
    public Child(String name) {
        this.name = name;
    }
}
public static <T extends Comparable<T>> T max(List<? extends T> list, int begin, int end) {
    ...
}

public static void main(String[] args) {
    List<Child> list = new ArrayList<Child>();
    max(list, 0, 2);  // Error with current method. Child does not implement Comparable<Child>
}
class Child extends Parent implements Comparable<Child>
public static Comparable max(List list, int begin, int end)
public static <T extends Comparable<? super T>>
    T max(List<T> list, int begin, int end)
public static <T extends C, C extends Comparable<C>>
    T max(List<T> list, int begin, int end)
    class Foo implements Comparable<Object>