相关疑难解决方法(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万
查看次数

为什么List &lt;List &lt;Integer &gt;&gt; list = new ArrayList &lt;ArrayList &lt;Integer &gt;&gt;();错了?

为什么以下代码在Java中是错误的?

List<List<Integer>> list = new ArrayList<ArrayList<Integer>>();
Run Code Online (Sandbox Code Playgroud)

我知道List<List<Integer>> list = new ArrayList<List<Integer>>()是正确的。

java list arraylist

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

当父为抽象时,将 ArrayList&lt;Parent&gt; 的类型更改为 ArrayList&lt;Child&gt;

我的问题是我有两个班级:父母和孩子。

父类是abstract,子类从它们扩展而来。

然后我有一个返回父级的方法,ArrayList我需要将它转换 ArrayList为子级。

我该做什么?

java casting arraylist abstract

4
推荐指数
1
解决办法
3185
查看次数

Java:不能通用List <?扩展Parent> mylist

另一个例子非常复杂,我根本不理解它,我的问题在某种程度上是相似的,但正如我所说的那样更简单,可能会在更简单的答案中产生

public List<? extends Parent> myfunction(List<? extends Parent> mylist){
       mylist.add(new Child())  ; //Doesn't Compile
}
Run Code Online (Sandbox Code Playgroud)

java generics collections inheritance list

1
推荐指数
2
解决办法
5060
查看次数

ArrayList和Polymorphism

如果有人可以在这里指出问题和可能的解释,那将是非常有帮助的.

class Parent{}    
public class ChildClass extends Parent{ 
  /*Main class*/    
  public static void main(String[] args) {  

      ArrayList<ChildClass> a3 = new ArrayList<ChildClass>();   
      foo(a3);      
    }
  /*another function*/
  static void foo(ArrayList<Parent> obj) {      
}
Run Code Online (Sandbox Code Playgroud)

这会引发以下编译错误.

The method foo(ArrayList<Parent>) in the type ChildClass is not applicable for the arguments (ArrayList<ChildClass>)
Run Code Online (Sandbox Code Playgroud)

多态的规则应该允许我这样做.对?在所有ChildClass IS-A Parent之后.什么似乎是问题?

java oop polymorphism

0
推荐指数
1
解决办法
188
查看次数