0

我的实际设置有点复杂,所以我将制定一个更通用的示例。考虑以下类(使用 Java 语法):

class Set
{
...
    Set subSet(Element[] elementList)
    {
    ...
    }
}

class SetOfNumbers extends Set
{
...
    int operationOnSetsOfNumbers()
    {
    ...
    }
}

我希望能够编写以下代码:

Set someSet = new SetOfNumbers(...);
System.out.println(someSet.subset(...).operationOnSetsOfNumbers());

当然,这不会编译,因为 operationOnSetsOfNumbers() 不是 Set 的成员。一种解决方案是只为每个子类单独实现 subSet 方法,每次都给它适当的返回类型,但是如果 subSet 的实现复杂且子类很多,这显然是不优雅的。我想要一种方法来以某种方式在 Set 的成员函数中引用 Set 的任意子级,但我想不出一种方法来做到这一点。有任何想法吗?

4

1 回答 1

0

您可以从泛型中受益,如下所示:

class Set<T extends Set<T>>
{
    ...
    T subSet(Element[] elementList)
    {
        ...
    }
}

class SetOfNumbers extends Set<SetOfNumbers>
{
    ...
    int operationOnSetsOfNumbers()
    {
        ...
    }
}

因此,当您subSet()在实例上调用方法时SetOfNumbers,返回类型将SetOfNumbers不是 Set。因此,您将能够operationOnSetsOfNumbers在调用 subSet() 之后进行后续调用。

于 2013-10-13T19:41:57.120 回答