Интересно, можно ли потребовать, чтобы параметр java-метода был любого типа из конечного набора типов. Например, я использую библиотеку, в которой два (или более) типа имеют общие методы, но их самый низкий общий предок в иерархии типов - это Object. Что я имею в виду здесь:
public interface A {
void myMethod();
}
public interface B {
void myMethod();
}
...
public void useMyMethod(A a) {
// code duplication
}
public void useMyMethod(B b) {
// code duplication
}
Я хочу избежать дублирования кода. Я думаю примерно так:
public void useMyMethod(A|B obj){
obj.myMethod();
}
Подобный тип синтаксиса уже существует в java. Например:
try{
//fail
} catch (IllegalArgumentException | IllegalStateException e){
// use e safely here
}
Очевидно, это невозможно. Как я могу создать хорошо спроектированный код, используя такой тип нередактируемой иерархии типов?