Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中更改接口及其后果?_Java_Interface - Fatal编程技术网

如何在Java中更改接口及其后果?

如何在Java中更改接口及其后果?,java,interface,Java,Interface,在应用程序中更改接口的最佳实践是什么。如果这个接口已经被许多Java类实现,那么改变它的最佳方式是什么?你打算扩展到一个新的班级吗?你会使用任何设计模式吗?或者你使用授权(我不认为有任何方式使用授权)?您是否打算使用不推荐使用的注释 这是最好的解决方案吗 public interface interface1 { } public interface interface2 extends interface1 { public void newMethod() } 如果您拥有代码,那么更改接

在应用程序中更改接口的最佳实践是什么。如果这个接口已经被许多Java类实现,那么改变它的最佳方式是什么?你打算扩展到一个新的班级吗?你会使用任何设计模式吗?或者你使用授权(我不认为有任何方式使用授权)?您是否打算使用不推荐使用的注释

这是最好的解决方案吗

public interface interface1
{
}

public interface interface2 extends interface1
{
public void newMethod()
}

如果您拥有代码,那么更改接口的最佳方法是修复对它的所有引用,而不是将不推荐的代码留在身边。

有两种方法可以立即想到

  • 在IDE中,使用重构工具更改接口。更高级的IDE(Eclipse可以-我不知道其他IDE)可以立即重构任何已知的实现。这需要打开受影响的项目
  • 您的解决方案,
    MyInterface2扩展了MyInterface
    也被广泛使用,因为它不会破坏现有的实现者

  • 如果您的解决方案是在代码审计或审查中提出的,我不会拒绝它-没关系,IMHO。

    如果其他所有实现的类都不需要此方法
    interface1
    ,那么我认为这样做可以避免重大的代码更改

    那么,下一个问题,我们是否需要在
    接口2
    (或者)只需要在所需的类中使用它就足够了


    如果您不想将这个新方法定义为
    contract
    ,换句话说,没有其他类需要实现,那么我甚至不会创建
    接口2
    ,您可以使用设计模式。
    抽象工厂或桥接模式可以使用

    在Intellij IDEA中,有一种叫做类型迁移的工具,正如我所记得的,正是在这种情况下,您还可以进行“穷人的重构”:更改接口,然后等待IDE标记所有现在已损坏的实现。这也要求实施项目是开放的。我们以前做过这样的工作,我们需要实际查看(和检查)接口的所有实现。您能提供此解决方案的示例代码吗?我不认为使用抽象工厂或桥接模式是一个好主意,他们会为这个简单的解决方案增加开销,不是吗?这是正确的,但代码可能很大,您可能无法一次更改所有的实现