无法将抽象对象的扩展对象传递给以抽象对象作为参数的方法
Cannot pass Object which extend of a abstract one into a Method with the abstract Object as Parameter
方法代码如下:
public void setupList(ArrayList<AnyAbstractObject> list)
{
//Here´s the Code stuff. This Method is in the Class: AlphabeticList
}
我尝试用以下方法调用此方法:
setUpList(new ArrayList<THEObject>);
对象代码:
public class THEObject extends AnyAbstractObject{//Lalala}
当我尝试运行这个程序时,控制台打印如下:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method setupList(AnyAbstractObject[]) in the type AlphabeticList is not applicable for the arguments (AlphabeticList)
at Test.Tester.main(Tester.java:22)
这里有什么问题?
ArrayList<THEObject>
不是 ArrayList<AnyAbstractObject>
,尽管 THEObject
是 AnyAbstractObject
。重点是:
每只猫都是动物。每个“满是猫的房间”都是“满是动物的房间”吗?
乍一看,似乎是这样。但事实并非如此。有些事情你绝对可以用一个来做,但不能用另一个。例如,您可以从“满是猫的房间”中随机挑选一个人并拥抱它。但这不是你可以安全地使用“满是动物的房间”(当心虫子、鳄鱼等...)
在 Java 中,我们会有 class 层级 public class Cat extends Animal
。而"do stuff with"是应用方法。
虽然您知道从 ArrayList<Cat>
中提取的每个元素都是 Cat
:
ArrayList<Cat> roomFullOfCats = getKittens();
Cat tom = roomFullOfCats.get(42);
你不能指望从 ArrayList<Animal>
中取出的单个元素是 Cat
ArrayList<Animal> roomFullOfAnimals = getAnimals();
Animal jerry = roomFullOfAnimals.get(0); // <-- perfectly legal
Cat tom = roomFullOfAnimals.get(42); // <-- fails
这些是泛型编程的拖鞋,Java Tutorial chapter on Generic Programming 优雅地覆盖了它们。
setupList 和 setUpList 不是同一种方法。 Java 区分大小写。
方法代码如下:
public void setupList(ArrayList<AnyAbstractObject> list)
{
//Here´s the Code stuff. This Method is in the Class: AlphabeticList
}
我尝试用以下方法调用此方法:
setUpList(new ArrayList<THEObject>);
对象代码:
public class THEObject extends AnyAbstractObject{//Lalala}
当我尝试运行这个程序时,控制台打印如下:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method setupList(AnyAbstractObject[]) in the type AlphabeticList is not applicable for the arguments (AlphabeticList)at Test.Tester.main(Tester.java:22)
这里有什么问题?
ArrayList<THEObject>
不是 ArrayList<AnyAbstractObject>
,尽管 THEObject
是 AnyAbstractObject
。重点是:
每只猫都是动物。每个“满是猫的房间”都是“满是动物的房间”吗?
乍一看,似乎是这样。但事实并非如此。有些事情你绝对可以用一个来做,但不能用另一个。例如,您可以从“满是猫的房间”中随机挑选一个人并拥抱它。但这不是你可以安全地使用“满是动物的房间”(当心虫子、鳄鱼等...)
在 Java 中,我们会有 class 层级 public class Cat extends Animal
。而"do stuff with"是应用方法。
虽然您知道从 ArrayList<Cat>
中提取的每个元素都是 Cat
:
ArrayList<Cat> roomFullOfCats = getKittens();
Cat tom = roomFullOfCats.get(42);
你不能指望从 ArrayList<Animal>
中取出的单个元素是 Cat
ArrayList<Animal> roomFullOfAnimals = getAnimals();
Animal jerry = roomFullOfAnimals.get(0); // <-- perfectly legal
Cat tom = roomFullOfAnimals.get(42); // <-- fails
这些是泛型编程的拖鞋,Java Tutorial chapter on Generic Programming 优雅地覆盖了它们。
setupList 和 setUpList 不是同一种方法。 Java 区分大小写。