【发布时间】:2014-05-24 14:49:48
【问题描述】:
考虑以下定义和实现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。 -
为什么
Foo是interface?通常,当您编写一个接口时,您希望至少在理论上可能有多个类实现它。如果您正在编写一个接口并期望只有一个实现,那么我不得不质疑您为什么将其编写为一个接口。也许有一个很好的理由。但是,如果您解释原因是什么,也许我们可以为您指出组织代码的更好方法。 (P.S. 在 C++ 中以这种方式做事的原因不适用于 Java。)
标签: java design-patterns protected package-private