以下是方法代码:
public void setupList(ArrayList<AnyAbstractObject> list)
{
//Here´s the Code stuff. This Method is in the Class: AlphabeticList
}
我尝试用以下方法调用此方法:
setUpList(new ArrayList<THEObject>);
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)
这里有什么问题?
答案 0 :(得分:4)
ArrayList<THEObject>
不是ArrayList<AnyAbstractObject>
,即使THEObject
是AnyAbstractObject
。这是一个问题:
每只猫都是动物。每个“房间里满是猫”是一个“充满动物的房间”吗?
起初看起来似乎如此。但事实并非如此。有一些东西你绝对可以用一个,但不能与另一个。例如,你可以从一个“充满猫的房间”中随机抽取一个人,然后拥抱它。但这不是你可以安全地用“充满动物的房间”做的事情(小心虫子,鳄鱼等......)
在Java中,我们将拥有类层次结构public class Cat extends Animal
。而“做东西”就是应用一种方法。
虽然您知道从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优雅地涵盖了它们。
答案 1 :(得分:0)
setupList和setUpList不是同一种方法。 Java区分大小写。