У меня есть класс A
и интерфейс B
, а также метод:
void foo(A x) {}
Я хочу определить ограничение для параметра x
, которое должно реализовывать интерфейс B
.
Хотя я знаю, что это можно сделать во время выполнения, например:
void foo(A x) {
if (!(x instanceof B)) {
throw new IllegalStateException();
}
}
Или определить другой класс и изменить сигнатуру метода, например:
class C extends A implements B {}
void foo(C x) {}
Я не принимаю это решение, поскольку в моем случае у меня есть много подклассов A
в стороннем банке, и я не хочу их изменять.
Интересно, может ли это бытьдостигается на уровне языка, позволяя это ограничение, когда я пишу код вызова, на лету.