【发布时间】:2013-03-18 06:54:25
【问题描述】:
我正试图弄清楚如何让泛型越过障碍。
我有:
interface Root { }
interface Middle extends Root { }
class Type implements Root { }
还有许多“子类型”类:
class Subtype1 extends Type implements Middle { }
class Subtype2 extends Type implements Middle { }
...
我想要声明一个具有两个类型参数T 和S 的类,其中T 由Type 绑定,S 由T 和Middle 绑定。
我看不出用泛型来确保S 扩展T 并实现Middle。
我想要的是这样的:
class Handler<T extends Root, S extends T, S extends Middle>;
或
class Handler<T extends Root, S extends <T extends Middle>>;
当然,两者都不合法。也许我缺少一些魔法?
【问题讨论】:
-
你不能这样做。您可以有多个边界,但它们必须是 0-1 类加上多个接口。在多重绑定的情况下,您不能拥有通用类型。我怀疑这个限制被保留了,因为允许输入多个边界会给语法检查器带来很多复杂性,这是一种罕见的边缘情况。
-
谢谢。那也是我的阅读,但我认为我可能在规范中遗漏了一些东西。铸造它是!
-
您能解释一下为什么声明
Handler<T extends Root, S extends Subtype>还不够吗?唯一的区别是T可能是比S更具体的类型,仅此而已。 -
Handler<T extends Root, S extends Subtype>表示 Handler 绑定到单个 Subtype。我有几个,这意味着 Handler 不再是跨子类型的泛型。实际上,我的代码有六个子类型,这意味着绑定到特定子类型的处理程序数量相等。
标签: java generics nested-generics