default-method相关内容

Java默认接口方法具体用例

Java 9 即将推出,更多特性将添加到 Java 接口中,例如私有方法.接口中的 default 方法是在 Java 8 中添加的,本质上是为了 支持在集合中使用 lambdas,而不会破坏与该语言以前版本的复古兼容性. 在 Scala 中,trait 中的方法非常有用.但是,Scala 处理 trait 的方法与使用 default 方法的 Java 不同.考虑多重继承解析或使用 tra ..
发布时间:2021-12-31 14:49:11 其他开发

为什么我们不能在 lambda 表达式中使用默认方法?

我正在阅读 Java 8 教程,作者展示了代码: 接口公式{双计算(int a);默认双 sqrt(int a) {返回 Math.sqrt(a);}} 然后说 无法从 lambda 表达式中访问默认方法.这以下代码无法编译: 公式公式 = (a) ->sqrt(a * 100); 但他没有解释为什么不可能.我运行了代码,它给出了错误, 不兼容的类型:公式不是一个功能接口` ..
发布时间:2021-12-31 14:45:25 Java开发

Java 8 接口方法中不允许“同步"的原因是什么?

在 Java 8 中,我可以轻松地编写: interface Interface1 {默认无效方法1(){同步(这个){//某物}}静态无效方法2(){同步(Interface1.class){//某物}}} 我将获得我也可以在类中使用的完整同步语义.但是,我不能在方法声明中使用 synchronized 修饰符: interface Interface2 {默认同步 void method ..
发布时间:2021-12-28 09:08:06 Java开发

具有默认方法的接口何时初始化?

在搜索 Java 语言规范以回答这个问题时,我了解到那 在初始化一个类之前,它的直接超类必须是已初始化,但类实现的接口不是 类似地,接口的超接口不是在接口初始化之前进行初始化. 出于我自己的好奇,我尝试了它,并且正如预期的那样,接口 InterfaceType 没有初始化. 公共类示例{public static void main(String[] args) 抛出异常 {Inte ..
发布时间:2021-12-28 09:01:01 Java开发

超类方法与接口默认方法冲突解决

考虑下面的例子, public class Testing extends SupCls 实现 Intf {公共静态无效主(字符串 [] args){新测试().测试();}}类 SupCls {公共无效测试(){System.out.println("来自 SupCls");}}接口内部{公共默认无效测试(){System.out.println("From Intf");}} 如您所见,S ..
发布时间:2021-12-28 08:54:27 Java开发

Java 8 默认方法会破坏源代码兼容性吗?

Java 源代码通常是向前兼容的.据我所知,在 Java 8 之前,编译类 和 源代码都向前兼容以后的 JDK/JVM 版本.[更新:这不正确,请参阅下面的“枚举"等注释.] 然而,随着 Java 8 中默认方法的添加,情况似乎不再如此. 例如,我一直在使用的库有一个 java.util.List 的实现,其中包括一个 List排序().此方法返回已排序的列表内容的副本.该库作为 jar 文 ..
发布时间:2021-12-28 08:53:24 Java开发

为什么是“最终"?不允许在 Java 8 接口方法中使用?

Java 8 最有用的特性之一是接口上的新default 方法.引入它们主要有两个原因(可能还有其他原因): 提供实际的默认实现.示例:Iterator.remove() 允许 JDK API 演进.示例:可迭代.forEach() 从 API 设计者的角度来看,我希望能够在接口方法上使用其他修饰符,例如最终.这在添加便利方法时很有用,可以防止在实现类时发生“意外"覆盖: inte ..
发布时间:2021-12-28 08:41:53 Java开发

Java 8 默认方法与抽象类中的非抽象方法

Java 8 接口默认方法与抽象类中的非抽象方法- 两者之间有什么区别吗(除了iface的区别-类,可见性等) 默认方法是不是在 Java 中退步了,这意味着它违背了 Java 多年来宣传的本质?! 解决方案 抽象类中的非抽象方法将在其具体子类调用 super() 时被调用,如果它被覆盖.所以有多种可能.如果方法未被覆盖,则将执行超类方法.如果我们在具体的子类方法中使用 super( ..
发布时间:2021-11-26 17:05:21 Java开发

Java8:为什么禁止为来自 java.lang.Object 的方法定义默认方法

默认方法是我们 Java 工具箱中的一个不错的新工具.但是,我尝试编写一个接口来定义 toString 方法的 default 版本.Java 告诉我这是禁止的,因为在 java.lang.Object 中声明的方法可能不是 defaulted.为什么会这样? 我知道有“基类总是获胜"的规则,所以默认情况下(双关语;),Object 方法的任何 default 实现都将被覆盖无论如何,来自 ..
发布时间:2021-11-25 20:31:27 Java开发

Java 8 中 Default 或 Defender 方法的用途

Java 8 包含一个名为 Defender 方法 的新功能,它允许创建接口中的默认方法实现. 首先,对于所有使用 Java 的精简程序员来说,这是一个巨大的范式转变.我观看了 Brian Goetz 提供的 JavaOne 13 演示,他在那里讨论了集合库中新的 stream() 和 parallelStream() 实现. 对于在Collection 接口中添加新方法,他们不可能在 ..
发布时间:2021-11-25 17:51:10 Java开发

在 Java 中显式调用默认方法

Java 8 引入了默认方法提供无需修改现有实现即可扩展接口的能力. 我想知道当某个方法被覆盖或由于不同接口中的默认实现冲突而无法使用时,是否可以显式调用该方法的默认实现. 接口 A {默认无效 foo() {System.out.println("A.foo");}}B 类实现 A {@覆盖公共无效 foo() {System.out.println("B.foo");}公共无效 afo ..
发布时间:2021-11-25 14:24:58 Java开发

Java 是否计划使用默认方法 (java8) 替代抽象类?

Java 有计划用default method 代替Abstract Class 吗?我找不到使用默认方法而不是抽象方法的真实案例? 解决方案 默认方法不能替代抽象类,因为抽象类可以(并且经常这样做)具有字段.接口只能包含行为而不能包含状态,这在未来不太可能改变,因为 Java 中状态的多重继承被视为(正确或错误)邪恶. 它们也可以有 final 方法,这是您无法用 default ..
发布时间:2021-11-25 09:51:21 Java开发

Java 8 默认方法与抽象类中的非抽象方法

Java 8 接口默认方法与抽象类中的非抽象方法- 两者之间有什么区别吗(除了iface的区别-类,可见性等) 默认方法是不是在 Java 中退步了,这意味着它违背了 Java 多年来宣传的本质?! 解决方案 抽象类中的非抽象方法将在其具体子类调用 super() 时被调用,如果它被覆盖.所以有多种可能.如果方法未被覆盖,则将执行超类方法.如果我们在具体的子类方法中使用 super( ..
发布时间:2021-11-25 09:37:03 Java开发

Java 8向类添加扩展/默认方法

我正在寻找与C#扩展方法功能等效的Java.现在,我一直在阅读有关Java 8的默认方法的信息,但是据我所知,我只能将它们添加到接口中. ...是否有任何语言功能都可以让我为未实现接口的最终类​​编写扩展方法?(我宁愿不必包装它...) 解决方案 C#扩展方法只是将扩展类型作为第一个参数的静态方法的语法糖.Java默认方法是完全不同的东西.要模仿C#扩展方法,只需编写常用的静态方法. ..
发布时间:2021-05-18 19:52:41 Java开发

为什么使用接口默认方法?

学习Java 8的默认方法. 与其他任何资源一样,此链接在互联网上说 在“最严格的意义上",默认方法是倒退的,因为 它们允许您使用代码“污染"您的界面.但是他们 提供最优雅,最实用的方法来允许倒退 兼容性. Oracle可以轻松地更新所有 集合类,并为您改进现有代码以用于 Lambda. 我的理解是java 8开发者/设计者在接口中提供了默认方法,因此所有实现类都不必不必要地 覆盖相同 ..
发布时间:2020-08-01 21:29:21 Java开发

从超类继承方法的重要性,而不是从Java 8中实现接口继承默认方法的重要性

我从此处: 如果层次结构中的任何类都具有具有相同签名的方法,则默认方法将变得无关紧要.缺省方法不能覆盖java.lang.Object中的方法.推理非常简单,这是因为Object是所有java类的基类.因此,即使我们将Object类方法定义为接口中的默认方法,也将是无用的,因为将始终使用Object类方法.因此,为了避免混淆,我们不能使用覆盖Object类方法的默认方法. 我迅速尝试了 ..
发布时间:2020-08-01 21:21:11 Java开发