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
需要在Java8中实现默认方法_Java_Java 8 - Fatal编程技术网

需要在Java8中实现默认方法

需要在Java8中实现默认方法,java,java-8,Java,Java 8,当我在寻找防守队员方法的答案时,我遇到了这个问题 你能详细说明一下在接受的答案中下面的意思吗 您应该能够切换到Java8,而不必实现新的 你班上的方法 原始问题的提问者M Sach说,与其使用默认方法,不如将默认实现放在一个抽象类中 回答者埃兰说,这将打破现有的代码 例如,假设您自己的列表实现是用Java7编写的,它不是从AbstractList继承的。当您将代码迁移到Java8时,会发生什么?列表接口中突然出现了一堆新方法,您自己的列表实现没有这些方法的默认实现,这些方法在AbstractL

当我在寻找防守队员方法的答案时,我遇到了这个问题

你能详细说明一下在接受的答案中下面的意思吗

您应该能够切换到Java8,而不必实现新的 你班上的方法


原始问题的提问者M Sach说,与其使用默认方法,不如将默认实现放在一个抽象类中

回答者埃兰说,这将打破现有的代码

例如,假设您自己的列表实现是用Java7编写的,它不是从AbstractList继承的。当您将代码迁移到Java8时,会发生什么?列表接口中突然出现了一堆新方法,您自己的列表实现没有这些方法的默认实现,这些方法在AbstractList中,您的类不会继承它们!您的代码将不再编译

这意味着在迁移到Java8时,您可能必须为现有类编写新方法


但是,对于默认方法,默认实现在接口本身,因此您不必编写新方法。

谢谢您的回答。你们是说在M Sach的世界里,你们可以在抽象类中有方法的默认实现,在列表接口中也有抽象声明?但是为什么我们首先需要它呢?我们不能在抽象类中只有默认实现,而在列表中没有它们的抽象方法签名吗?@ghostrider默认方法和抽象方法是不同的方法集。过去是抽象的东西应该仍然是抽象的,对吗?请记住,我们在这里试图解决的整个问题是,在Java 8中,他们希望为某些接口的实现者添加一些更具体的方法,因此M Sach建议我们应该将这些方法放在接口和实现者之间的抽象类中,下面是一个链接,它描述了在M Sach的场景中迁移到java8时的类图。对吗?我的问题是,为什么我们首先需要在列表界面中使用测试方法?为什么不在AbstractList中只进行测试?@ghostrider哦,这就是你的意思!我之前的评论有点误解了你。但正如我所说的,这一点的全部目的是在接口实现者之间共享公共功能。例如,他们的目标是给所有列表提供一个forEach方法,因此不在接口中的方法有点达不到目的。