需要在Java8中实现默认方法
当我在寻找防守队员方法的答案时,我遇到了这个问题 你能详细说明一下在接受的答案中下面的意思吗 您应该能够切换到Java8,而不必实现新的 你班上的方法需要在Java8中实现默认方法,java,java-8,Java,Java 8,当我在寻找防守队员方法的答案时,我遇到了这个问题 你能详细说明一下在接受的答案中下面的意思吗 您应该能够切换到Java8,而不必实现新的 你班上的方法 原始问题的提问者M Sach说,与其使用默认方法,不如将默认实现放在一个抽象类中 回答者埃兰说,这将打破现有的代码 例如,假设您自己的列表实现是用Java7编写的,它不是从AbstractList继承的。当您将代码迁移到Java8时,会发生什么?列表接口中突然出现了一堆新方法,您自己的列表实现没有这些方法的默认实现,这些方法在AbstractL
原始问题的提问者M Sach说,与其使用默认方法,不如将默认实现放在一个抽象类中 回答者埃兰说,这将打破现有的代码 例如,假设您自己的列表实现是用Java7编写的,它不是从AbstractList继承的。当您将代码迁移到Java8时,会发生什么?列表接口中突然出现了一堆新方法,您自己的列表实现没有这些方法的默认实现,这些方法在AbstractList中,您的类不会继承它们!您的代码将不再编译 这意味着在迁移到Java8时,您可能必须为现有类编写新方法
但是,对于默认方法,默认实现在接口本身,因此您不必编写新方法。谢谢您的回答。你们是说在M Sach的世界里,你们可以在抽象类中有方法的默认实现,在列表接口中也有抽象声明?但是为什么我们首先需要它呢?我们不能在抽象类中只有默认实现,而在列表中没有它们的抽象方法签名吗?@ghostrider默认方法和抽象方法是不同的方法集。过去是抽象的东西应该仍然是抽象的,对吗?请记住,我们在这里试图解决的整个问题是,在Java 8中,他们希望为某些接口的实现者添加一些更具体的方法,因此M Sach建议我们应该将这些方法放在接口和实现者之间的抽象类中,下面是一个链接,它描述了在M Sach的场景中迁移到java8时的类图。对吗?我的问题是,为什么我们首先需要在列表界面中使用测试方法?为什么不在AbstractList中只进行测试?@ghostrider哦,这就是你的意思!我之前的评论有点误解了你。但正如我所说的,这一点的全部目的是在接口实现者之间共享公共功能。例如,他们的目标是给所有列表提供一个forEach方法,因此不在接口中的方法有点达不到目的。