Предположим, что у меня есть эти интерфейсы:
public interface I1 {
void foo();
}
public interface I2 {
void bar();
}
и классы:
public class A extends AParent implements I1, I2 {
// code for foo and bar methods here
}
public class B extends BParent implements I1, I2 {
// code for foo and bar methods here
}
public class C extends CParent implements I1 {
// code for foo method here
}
Теперь, с generics, у меня может быть такой метод, как:
public <T extends I1 & I2> void method(T param) {
param.foo();
param.bar();
}
и я могу назвать его как A, так и B как параметры, но не с C (он не реализует I2).
Был ли способ достижения этого типа предопределенных типов безопасности (java < 1.5).
Учтите, что A, B и C имеют разные деревья наследования, и на самом деле это не совсем так, как AParent и BParent, которые имеют общий родитель.
Я знаю, что вы могли бы сделать:
public void method(I1 param) {
param.foo();
((I2)param).bar();
}
но затем вы также можете вызвать method(new C())
, который не реализует I2, поэтому вы попадаете в неприятности.
Итак, есть ли другие способы сделать это?
P.S.: Мне действительно не нужно это делать, это в основном из любопытства, о котором я прошу.