Java:如何编写泛型方法?

标签 java generics

假设我有几个 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/

相关文章:

c# - 在 C# 中将数字数组转换为字节,反之亦然

c# - 为什么 Assembly.GetTypes() 不会返回封闭泛型类型?

java - 将 JFrame 窗口置于最前面

java - 在 Vaadin 7 项目中使用 TinyMCEEditor Wrapper 时如何更改 TinyMCETextField 中的默认字体大小?

java - 无法从传入的键中找到 HashMap 中的关联值

java - 泛型类型 <P> 在 Javadoc 中转换为段落标记

java - 如何在从java中的 session 中检索 session 数据时验证 session 数据?

java - Eclipse 窗口生成器中的多个窗口

ios - 通用功能在同一环境中表现不同

scala - 对集合执行多次操作后返回相同的集合类型