我是 Java 新手,我尝试制作一些非常简单的 Java 应用程序。在我的尝试中,我遇到了泛化问题。我有一个Person对象列表。人可以是父亲或母亲。
然后,我有几个同名的方法eat(...)但它们的输入参数不同。这些方法不是Person类的一部分。其中一种方法接受Mother作为参数,另一种接受Father。
问题是如何动态决定在Person列表上调用哪个方法。当我尝试遍历列表并调用o.eat(iterator)时,它会提示编译器错误,因为迭代器是Person类型,但我的eat方法需要母亲或父亲作为参数。编译器不知道我对每种类型的人都有方法
到目前为止,我已经用if语句解决了我的问题,在该语句中,我通过GetType()方法将类类型与母亲和父亲进行了比较,如果相等,我可以将Person转换为适当的类型。
代码如下所示:
if (person.getClass().equals(Father.class)) {
theView.eat((Father) person);
}
if (person.getClass().equals(Mother.class)) {
theView.eat((Mother) person);
}
吃法如下:
public void eat(Mother m){
textArea.append(m.breakfast);
textArea.append(m.lunch);
textArea.append(m.dinner);
}
午餐 晚餐 和 早餐 只是一些表明这个人在做什么的字符串
person 是代码是遍历 Person 对象列表的迭代器
有没有更好的解决方案可以使过程自动化?
提前谢谢。