У меня есть интерфейс Foo
public interface Foo {
public void test();
}
Класс FooChild реализует интерфейс Foo.
public class FooChild implements Foo {
@Override
public void test() {...}
public void test2() {...}
}
Мне нужно вызвать функцию test2 где-нибудь в коде.
Foo f = new FooChild();
((FooChild) f).test2();
Я действительно ненавижу приводить интерфейс к классу.
Итак, я добавил еще один интерфейс Bar.
public interface Bar extends Foo {
public void test2();
}
public class FooChild implements Bar {
@Override
public void test() {...}
@Override
public void test2() {...}
}
Теперь я вызываю test2 () с приведением к интерфейсу, а не к классу.
Foo f = new FooChild();
((Bar) f).test2();
Я могу добавить функцию test2 в интерфейс Foo,
но есть слишком много классов, которые реализуют Foo.
Если я добавлю функцию, я должен добавить коды ко всем классам, которые реализуют Foo.
Хотя я могу сделать это выше, у меня фактически нет разрешения редактировать Foo.
Будет ли какой-нибудь причудливый способ решить эту проблему? (надеюсь, без кастинга)
EDIT:
f передается как параметр метода.
Как сказал Джон, я должен был быть более конкретным.
Извините за путаницу.
public void doSomething(Foo f) {
...
}