我的实际设置有点复杂,所以我将制定一个更通用的例子。请考虑以下类(使用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的任意子项,但我想不出这样做的方法。有什么想法吗?
答案 0 :(得分:0)
您可以从泛型中受益如下:
class Set<T extends Set<T>>
{
...
T subSet(Element[] elementList)
{
...
}
}
class SetOfNumbers extends Set<SetOfNumbers>
{
...
int operationOnSetsOfNumbers()
{
...
}
}
因此,当您在subSet()
实例上调用SetOfNumbers
方法时,返回类型将为SetOfNumbers
而不是Set。因此,您可以在调用subSet()后调用operationOnSetsOfNumbers
。