我在我的代码中使用了一个接口已经存在了很长时间,并且许多类已经实现了它。 现在我必须为这个接口添加一个新方法用于新类[旧类不需要新方法]。因此,在许多地方已经建议我可以扩展旧接口并使用新方法创建新接口。 现在我的问题是使用接口实现的app启动器只引用了基接口并使用基接口我不能在新接口中调用方法。
baseInterface is extended by newInterface
Class Applauncher{
baseInterface b;
}
可以看出,我无法在Applauncher类的“newInterface”中调用新方法。
我想要一个不会改变旧实现的解决方案。
答案 0 :(得分:6)
基本上,当您需要在applauncher中调用新方法时,您可以执行以下操作:
if (b instanceof NewInterface) {
((NewInterface)b).newMethod();
}
这对你来说是一个解决方案吗?
答案 1 :(得分:4)
不可否认还没有发布,但是当Java 8问世时,你会对这个一般问题有一个很好的解决方案:
public interface MyInterface {
Calendar myMethod();
Object myMeth2() default null;
}
重点是default null
位 - 默认关键字从8开始有一个新用法,允许您指定默认返回值(这意味着您不需要在所有实现中实现此方法。)