У меня есть эти классы.
class RedSocket {}
class GreenSocket {}
class RedWire {}
class GreenWire {}
У меня есть класс, который использует 2 генерических типа
public class Connection<W, S> {}
где W - тип провода, а 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 здесь)
Как я могу обеспечить проверку времени компиляции, чтобы убедиться, что сокет и провод имеют один и тот же цвет?