List<? super T>和之间有什么区别List<? extends T>?
我曾经使用List<? extends T>,但它不允许我添加元素list.add(e),而List<? super T>它.
关于以下内容我有几点想法:
public interface MaxStack<T extends Comparable <T>>
Run Code Online (Sandbox Code Playgroud)
1 - 为什么实现的类MaxStack应该像这样写:
public class MaxStackclass<T extends Comparable <T>> implements MaxStack<T>
Run Code Online (Sandbox Code Playgroud)
不是public class MaxStackclass<T extends Comparable <T>> implements MaxStack<T extends Comparable <T>>吗?
2-为什么这个类的私有变量,当我使用泛型时,应该只用<T>而不是用<T extnds Comparable<T>>?例如, private List<T> stack= new ArrayList<T>();
3 - <T extends Comparable<T>>和之间有什么区别<T extends Comparable>- 如果我需要比较班上的各种元素,两者都可以,不是吗?
编辑:我认为3的问题是,它可能允许插入以第二种方式定义的列表,以便具有不同的元素,这些元素都可以从可比较的方面扩展,然后当我想比较它们时,它将是不可能的,因为我们无法将String与Integer进行比较,所以都从Comparable扩展.
我有一个三类:1.class 在a Algorithm中max()找到最大值Collection:
public class Algorithm {
public static <T extends Comparable<T>> T max(Collection<? extends T> coll) {
T max = coll.iterator().next();
for (T elm : coll) {
if (max.compareTo(elm) < 0)
max = elm;
}
return max;
}
}
Run Code Online (Sandbox Code Playgroud)
2.Class Fruit:
public class Fruit implements Comparable<Fruit> {
private String name;
private int size;
public Fruit(String name, int size) {
this.name = name;
this.size = size;
}
public int compareTo(Fruit that) {
if (size …Run Code Online (Sandbox Code Playgroud) 我读到使用带有这样的超级通配符:
public class MyClass <T extends Comparable<? super T>> {
...
}
Run Code Online (Sandbox Code Playgroud)
代替:
public class MyClass <T extends Comparable<T>> {
...
}
Run Code Online (Sandbox Code Playgroud)
可以让这个班级"更通用",但我不明白为什么.
有人能提供一些具体的例子吗?