之间的区别?扩展vs E扩展

我目前正在阅读通配符,但我不知道两者之间是否有任何区别?扩展动物和 E 扩展动物。



守着一只汪
浏览 78回答 2
2回答

慕姐8265434

? extends Animal用于当您试图说任何扩展 Animal 的类都可以作为输入时。例如,List<? extends Animal>。如果您想在编写代码时跟踪类中的对象类型,您将使用 E。您可能只需要通过对象的单一类型。public class Node<T, E extends Animal> {&nbsp; &nbsp; public T findByObj(E obj) {&nbsp; &nbsp; &nbsp; &nbsp; // return index in Integer&nbsp; &nbsp; }}在这种情况下,您将像这样实例化并使用它:Node<Integer, Person> node = new Node<Integer, Person>();node.findByObj(new Person());您可能期望从 Person 类中得到一些东西,但可以使用随机类。它保持类型安全并且行为是可预测的。

翻过高山走不出你

哇,想到这个,我的脑袋几乎要爆炸了……据我所知,这两者都做同样的事情。也许他们在有些不同的情况下这样做?例如类定义、方法声明或方法的返回类型。请参阅我编写的一些代码来说明这一点。希望有更多知识的人会输入回复,但我想尝试回答这个问题。所以基本上...? 是一个通配符,表示 Animal 类的任何子类型或 Animal 类本身。请阅读泛型通配符:https ://en.wikipedia.org/wiki/Generics_in_Java以下是有关有界类型的更多信息,<E extends Animal>您给出的示例显然是:https ://docs.oracle.com/javase/tutorial/java/generics/bounded.html这表示任何 IS-A Animal 对象或 Animal 对象本身对于此类或方法参数都是可接受的。尝试输入一些代码并在 Animal 层次结构内部和外部尝试不同的对象以查看差异。例如,创建一个扩展 Animal 的 LolCat 类。查看我的程序如下:import java.util.ArrayList;import java.util.List;class Animal {&nbsp;public String toString() {&nbsp;&nbsp; &nbsp; return "I am an animal!";&nbsp;}}class LolCat extends Animal {&nbsp; public String toString() {&nbsp;&nbsp; &nbsp; return "I am a lolcat!";&nbsp; }}class Machine{}class Computer extends Machine {}public class TestThis{&nbsp; &nbsp; public <U extends Animal> void anyAnimal(U u) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("This is an animal ");&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(u);&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("The object type of U is: " + u.getClass().getName());&nbsp; &nbsp; }&nbsp; &nbsp; public void listAnimalFriends(List<? extends Animal> a) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("This is in the animal list: ");&nbsp; &nbsp; &nbsp; &nbsp; for (Animal anima: a) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(anima);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; TestThis t = new TestThis();&nbsp; &nbsp; &nbsp; &nbsp; t.anyAnimal(new LolCat());&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("\n");&nbsp; &nbsp; &nbsp; &nbsp; ArrayList<Animal> a_list = new ArrayList<>();&nbsp; &nbsp; &nbsp; &nbsp; a_list.add(new LolCat());&nbsp; &nbsp; &nbsp; &nbsp; t.listAnimalFriends(a_list);&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java