我使用Java但是我有更好的C#背景。我一直在界面中阅读Java的default
和static
方法。我想我理解接口中的默认方法是如何有用的。例如,我们在C#中有扩展方法。它有助于语言设计者,他们可以自由地为Where
,Select
等接口添加新方法,其中lambda表达式可以在不破坏binary code compatibility的情况下使用。因此,Java接口中的default
方法可以以相同的方式提供帮助。
但是当谈到Java接口中的static
方法时,我不确定它有多么有用。任何人都可以解释为什么static
方法添加到接口以及在什么情况下它们对我们的开发人员有用。我还想听听default
方法除了我提到的方法之外是否有不同的原因。
答案 0 :(得分:3)
但是当谈到Java接口中的静态方法时,我不确定它有多么有用。
它否定了单独的“实用程序”类的情况,其唯一目的是容纳与一个特定接口相关的静态方法。
Collections
总是让我想到的例子 - 如果从一开始就允许在接口上使用静态方法,那么整个类就没有必要了,静态方法可能只属于{{ 1}} interface(这是有道理的,因为它们都在Collection
类型上运行。)
当然,向后兼容性意味着我们不能立即在API中取消这样的设计,但这意味着未来的库设计可以将其考虑在内,并希望因此产生更清晰的API。