Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop_Design Patterns_Interface_Polymorphism - Fatal编程技术网

Java 在大量类中具有不同实现的现有接口中添加方法

Java 在大量类中具有不同实现的现有接口中添加方法,java,oop,design-patterns,interface,polymorphism,Java,Oop,Design Patterns,Interface,Polymorphism,如果我们的应用程序中有一个由大量类实现的接口,并且我们需要向该接口添加一个方法,那么推荐的方法是什么 如果我们使用较旧版本的java(比如说1.5)和较新版本的java(比如说1.8),方法会有所不同。您应该始终遵循开放供扩展关闭供修改的原则 如果你添加了一个新方法,那么所有实现它的类都会受到影响,你必须实现这个方法,不管是java 5还是java 8,直到它成为默认方法,这样更好 Create a new interface and the needful classes should ext

如果我们的应用程序中有一个由大量类实现的接口,并且我们需要向该接口添加一个方法,那么推荐的方法是什么


如果我们使用较旧版本的java(比如说1.5)和较新版本的java(比如说1.8),方法会有所不同。

您应该始终遵循开放供扩展关闭供修改的原则 如果你添加了一个新方法,那么所有实现它的类都会受到影响,你必须实现这个方法,不管是java 5还是java 8,直到它成为默认方法,这样更好

Create a new interface and the needful classes should extend it 

您应该始终遵循打开进行扩展关闭进行修改的原则 如果你添加了一个新方法,那么所有实现它的类都会受到影响,你必须实现这个方法,不管是java 5还是java 8,直到它成为默认方法,这样更好

Create a new interface and the needful classes should extend it 
我们需要向接口添加一个方法

那就没办法了。没有任何上下文说明你要添加的内容和原因,我相信你的话,你确实需要这样做。确保事实就是这样

Java5:添加方法。修复所有实现它的类

可以考虑为实现接口的新抽象基类添加默认值,并使所有实现都扩展该缺省基类。那么,如果你在未来处于同样的情况,你会有一个更轻松的时间

Java8:添加默认方法

我们需要向接口添加一个方法

那就没办法了。没有任何上下文说明你要添加的内容和原因,我相信你的话,你确实需要这样做。确保事实就是这样

Java5:添加方法。修复所有实现它的类

可以考虑为实现接口的新抽象基类添加默认值,并使所有实现都扩展该缺省基类。那么,如果你在未来处于同样的情况,你会有一个更轻松的时间


Java8:添加一个默认方法这不是一个流行的答案,但在我看来,您所设想的操作是一个困难的操作

接口定义了不同子系统之间的服务契约。更改该合同应该比更改实现更加困难。Java8在接口上引入了默认方法,将接口从严格契约转换为一种抽象基类。我想这可能会减轻更改接口带来的一些麻烦,但我认为开发人员应该感受到这种麻烦是正确的

事实上,在一个理想的世界中,所有接口都会事先商定,而且永远不需要更改接口。我想那是不切实际的,但我认为没有必要让它变得容易


我认为,简单的回答是,如果您更改了接口,您应该反思所有实现的类中需要进行哪些更改,咬紧牙关,然后继续进行更改。

这不是一个流行的答案,但在我看来,您设想的操作是一个困难的操作

接口定义了不同子系统之间的服务契约。更改该合同应该比更改实现更加困难。Java8在接口上引入了默认方法,将接口从严格契约转换为一种抽象基类。我想这可能会减轻更改接口带来的一些麻烦,但我认为开发人员应该感受到这种麻烦是正确的

事实上,在一个理想的世界中,所有接口都会事先商定,而且永远不需要更改接口。我想那是不切实际的,但我认为没有必要让它变得容易


我认为,简单的回答是,如果您更改了一个接口,您应该思考所有实现的类都需要进行哪些更改,咬紧牙关,然后继续进行并进行更改。

将接口从严格的契约转换为一种抽象基类这是不正确的。它在任何意义上都不是一个抽象类。如果是,您将无法实现其中的两个。它们不能包含状态。它将接口从一个严格的契约转换为一个更为宽松的契约,仅此而已。不管流行与否,这肯定是正确的答案。@Michael该措辞是一种抽象基类,而不是抽象基类。我同意凯文的观点。接口现在更接近抽象基类,现在有更多的继承继承加入到游戏中。通常当我在C++中实现抽象基类时,我想在抽象基类中提供一些但不是全部的功能。扩展抽象基类的具体类填充缺少的指定功能。不管@Michael怎么说,这正是自Java8以来您可以对接口所做的。非Java语言不会改变原则。@Michael,你把实用编程和术语转换的挑剔用法混为一谈了
它将接口从一个严格的契约转变为一种抽象的基类,这是不正确的。它在任何意义上都不是一个抽象类。如果是,您将无法实现其中的两个。它们不能包含状态。它将接口从一个严格的契约转换为一个更为宽松的契约,仅此而已。不管流行与否,这肯定是正确的答案。@Michael该措辞是一种抽象基类,而不是抽象基类。我同意凯文的观点。接口现在更接近抽象基类,现在有更多的继承继承加入到游戏中。通常当我在C++中实现抽象基类时,我想在抽象基类中提供一些但不是全部的功能。扩展抽象基类的具体类填充缺少的指定功能。不管@Michael怎么说,这正是自Java8以来您可以对接口所做的。非Java类语言不会改变原则。@Michael,你把实用编程和挑剔的术语用法混为一谈了。新方法的一个通用实现对所有类都有效吗?或者不同的类需要它们自己的实现吗?新方法的单个通用实现对所有类都有效吗?或者不同的类需要自己的实现?