1

我在我的代码中使用了一个已经存在很长时间的接口,并且许多类都实现了它。现在我必须为新类添加一个新方法到这个接口[旧类不需要新方法]。因此,正如许多地方所建议的那样,我可以扩展旧接口并使用新方法创建一个新接口。现在我的问题是使用接口实现的应用程序启动器仅引用基本接口并且使用基本接口我无法在新接口中调用方法。

baseInterface is extended by newInterface

Class Applauncher{

  baseInterface b;

}

所以可以看出我不能在 Applauncher 类的“newInterface”中调用新方法。

我想要一个不会动摇我旧实现的解决方案。

4

2 回答 2

6

基本上,当您需要在 applauncher 中调用新方法时,您可以执行以下操作:

if (b instanceof NewInterface) {
  ((NewInterface)b).newMethod();
}

这对你来说是一个解决方案吗?

于 2013-03-08T12:39:38.277 回答
4

诚然尚未发布,但当 Java 8 出现时,您将有一个很好的解决方案来解决这个一般性问题:

public interface MyInterface {
   Calendar myMethod();
   Object myMeth2() default null;
}

重要的一点是default null- default 关键字从 8 开始有了新的用法,它允许您指定默认返回值(这意味着您不需要在所有实现中实现此方法。)

于 2013-03-08T12:44:41.333 回答