假设我有几个 Creature
子类,并且它们每个都有某种 getGroup()
返回 List<Creature>
的方法.
我所说的“某种”是什么意思 .getGroup()
方法是该函数的名称在子类之间有所不同。例如,Wolf
我们成群结队旅行,所以他们有一个 getPack()
成员。 Fish
在学校旅行,所以他们有一个.getSchool()
成员(member),Humans
有一个getFamily()
成员(member)等。
<强> .getGroup()
Creature
中不存在,并且不能添加到接口(interface)中。这些类都无法编辑。
我正在编写一个方法来打印 Creature
的数量在他们的小组中。我该怎么做?
本质上,我希望将这两个函数压缩为同一个东西:
public void PrintSchoolSize(Fish dory) {
System.out.print(dory.getSchool().size());
}
public void PrintHiveSize(Bee bee) {
System.out.print(bee.getColony().size());
}
...进入以下函数:
public void printGroupSize( Class<? extends Creature> cree,
FunctionThatReturnsList getGroup() ) {
System.out.print(cree.getGroup().size();
}
我想我需要将第二个参数(函数指针?)传递给 void printGroupSize
。非常感谢任何帮助,谢谢!
编辑谢谢大家的帮助。这只是我试图解决的真实问题的简化。冗长、过于复杂的问题更难回答,所以我提出了这个更简单的场景。
唯一的答案在于使用通用函数(如果存在)。我实际使用的类没有通用接口(interface),但它们都有一个返回列表。
最佳答案
你在问题中描述的内容与Java的“通用方法”意义没有太大关系。您可以通过反射来实现它(请参阅 Class.getMethod()),但我向您保证您真的不想去那里。
Creature
最好声明每个子类都会重写的可能的抽象
方法getGroup()
。如果您愿意,除了提供具有子类特定名称的方法之外,您还可以这样做。如果代码想要在不知道生物的具体类型的情况下获取组(或其大小),则会调用该生物的 getGroup()
方法。这是多态性的一个应用,这似乎就是您真正想要的。
关于Java:如何编写泛型方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28594831/