相关疑难解决方法(0)

List <Dog>是List <Animal>的子类吗?为什么Java泛型不是隐式多态的?

我对Java泛型如何处理继承/多态性感到困惑.

假设以下层次结构 -

动物(父母)

- (儿童)

所以假设我有一个方法doSomething(List<Animal> animals).根据所有继承和多态的规则,我会假设a List<Dog> a List<Animal>而a List<Cat> a List<Animal>- 所以任何一个都可以传递给这个方法.不是这样.如果我想实现这种行为,我必须明确告诉该方法接受一个Animal的任何子类的列表doSomething(List<? extends Animal> animals).

我知道这是Java的行为.我的问题是为什么?为什么多态通常是隐含的,但是当涉及泛型时必须指定它?

java generics polymorphism inheritance

727
推荐指数
10
解决办法
10万
查看次数

Collections.reverseOrder如何在返回Comparator &lt;T&gt;时知道要使用的类型参数

根据Java API规范,Collections.reverseOrder的签名为

public static <T> Comparator<T> reverseOrder()

方法说明中给出的示例说它需要用作

Arrays.sort(a, Collections.reverseOrder());

当我们调用该方法时,我们在任何地方都没有指定使用哪种类型(T解析为哪种类型)。

在这种情况下,编译器如何解析T?是否可以根据分配给它的对象的类型来解析返回类型(T)?

顺便说一句,我知道重载的reverseOrder(Comparator<T> c)方法。

java

5
推荐指数
1
解决办法
2322
查看次数

标签 统计

java ×2

generics ×1

inheritance ×1

polymorphism ×1