Рассмотрим следующий класс, который определяет и реализует интерфейс Foo
:
public class MyClass {
public Foo getFoo() {
return new FooImpl();
}
public void fooMethod(Foo foo) {
final fooImpl = (FooImpl) foo;
fooImpl.hiddenMethod();
}
public interface Foo {
void doSomething();
}
private class FooImpl implements Foo {
public void doSomething();
void hiddenMethod() {
}
}
}
Внешние классы вызовут MyClass.getFoo()
для получения объекта Foo
и могут передать его обратно в fooMethod()
. fooMethod()
ожидает FooImpl
реализацию Foo
и приводит Foo
к FooImpl
, чтобы он мог вызвать пакетный метод hiddenMethod()
.
Мой вопрос в том, что я не без ума от приведения Foo
к FooImpl
. Есть ли другой шаблон, который я могу использовать, чтобы сделать то же самое?
Заранее спасибо...
fooMethod
принятьFooImpl
. - person Sotirios Delimanolis   schedule 10.04.2014Foo
этоinterface
? Обычно, когда вы пишете интерфейс, вы ожидаете, что, по крайней мере теоретически, может существовать более одного класса, реализующего его. Если вы пишете интерфейс и ожидаете, что будет только одна реализация, то у меня возникнет вопрос, почему вы пишете его как интерфейс. Может быть, есть веская причина. Но если вы объясните, в чем причина, возможно, мы сможем указать вам лучший способ организации кода. (P.S. Есть причины, по которым в C++ так делаются вещи, которые не применимы к Java.) - person ajb   schedule 10.04.2014