【发布时间】:2015-11-21 12:22:38
【问题描述】:
我有这些课程。
class RedSocket {}
class GreenSocket {}
class RedWire {}
class GreenWire {}
我有一个使用 2 个泛型类型的类
public class Connection<W, S> {}
其中 W 是 Wire 类型,S 是 Socket 类型。
我正在尝试强制执行编译时检查,以确保套接字和电线具有相同的颜色。
我试过这样做:
public class Connection<W extends Wire & Color, S extends Socket & Color> {}
interface Color {}
interface Red extends Color {}
interface Green extends Color {}
interface Socket {}
interface Wire {}
class RedSocket implements Socket, Red {}
class GreenSocket implements Socket, Green {}
class RedWire implements Wire, Red {}
class GreenWire implements Wire, Green {}
但这并不能真正确保使用的 Color 对于两种泛型类型都是相同的,并且仍然允许我这样做:
public class Connection<W extends Wire & Color, S extends Socket & Color> {
public static void main(String[] args) {
new Connection<RedWire, GreenSocket>();
new Connection<GreenWire, RedSocket>();
}
}
(Radiodef here 出色地解释了为什么会发生这种情况)
如何强制编译时检查以确保插座和电线具有相同的颜色?
【问题讨论】:
-
可能没有人关心,但是您有什么理由选择
M和Q作为Wire & Socket 的类型吗? -
啊!我原来的程序有不同的实体。我改变了其他一切,但忘记改变这些。谢谢指出,我改一下。 :)