日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

默认方法一种扩展旧代码的方法

發(fā)布時(shí)間:2023/12/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 默认方法一种扩展旧代码的方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如您所知,Java的新版本于2014年3月18日發(fā)布,我將介紹一系列文章來演示其新功能,也許在某些方面,我將談?wù)撐业南敕ê团u(píng)。

我認(rèn)為重要的第一個(gè)功能是“默認(rèn)方法”,在所有Java語言的先前版本中,接口只能包含方法定義(聲明)而不是方法實(shí)現(xiàn)(方法體),但是在Java 8中,接口中增加了一個(gè)新功能,使您能夠在接口中聲明方法及其實(shí)現(xiàn)。

假設(shè)您可以使用以下新功能創(chuàng)建一個(gè)界面:

public interface Dog {void bark();default void bite() {System.out.println("Biting Biting Biting");} }public class Husky implements Dog {@Overridepublic void bark() {System.out.println("barking");}public static void main(String... args){Dog dog = new Husky();dog.bite();dog.bark();} }

這是完全自我解釋的,您可以將行為添加到接口中,并且所有已實(shí)現(xiàn)的類都將這種行為作為方法的默認(rèn)實(shí)現(xiàn),因此不會(huì)被迫實(shí)現(xiàn)默認(rèn)方法。

默認(rèn)方法的原因

在之前的一篇文章中,我們對(duì)Open Close Principal進(jìn)行了介紹,就像在這個(gè)Principal類中的評(píng)論應(yīng)該關(guān)閉才能進(jìn)行修改而可以擴(kuò)展一樣。 我認(rèn)為默認(rèn)方法并不遵循該原則,但是有些地方也許我們沒有任何解決方案來擴(kuò)展我們的舊代碼。

例如,在Java 8中,語言中增加了一個(gè)新功能,可以在集合上使用lambda,可以使用此方法的一種方法是調(diào)用Collection接口的stream方法,如果這只是一個(gè)方法聲明,則說明實(shí)現(xiàn)了Collection的所有書面代碼會(huì)休息的。

有時(shí)候,對(duì)我來說,需要擴(kuò)展我的界面,但是由于許多其他客戶端正在使用界面,我不得不找到另一種解決方案,不幸的是,在大多數(shù)情況下,這是一種麻煩的方式。

有關(guān)默認(rèn)方法的幾點(diǎn)

當(dāng)您要使用默認(rèn)方法或要使用使用默認(rèn)方法的代碼時(shí),應(yīng)了解一些要點(diǎn)。

    • 擴(kuò)展包含默認(rèn)方法的接口:
      當(dāng)您想使用默認(rèn)方法擴(kuò)展或?qū)崿F(xiàn)接口時(shí),關(guān)于默認(rèn)方法有三種選擇。
      • 您可以使用它們的默認(rèn)實(shí)現(xiàn),而忽略以重新定義它們。
      • 您可以重新聲明它,因此它將是一種抽象方法。
      • 您可以通過重新定義它來覆蓋它。
    • 使用默認(rèn)方法的多重繼承:使用默認(rèn)方法,您可以擁有具有許多接口的mixin行為的類,但是您應(yīng)該注意一個(gè)重要的點(diǎn)。
      如果擴(kuò)展接口具有公共方法簽名,則您 將面臨編譯時(shí)錯(cuò)誤 ,因?yàn)橥环椒ê灻膬蓚€(gè)實(shí)現(xiàn)之間存在歧義,在這種情況下,您將需要重寫方法并通過自己的代碼來實(shí)現(xiàn)或選擇默認(rèn)方法之一。
public interface FirstInterface {default void doSomething(){System.out.println("Doing something from FirstInterface");}}public interface SecondInterface {default void doSomething(){System.out.println("Doing something from SecondInterface");} }public class FirstImplementation implements SecondInterface,FirstInterface {@Overridepublic void doSomething(){SecondInterface.super.doSomething();}public static void main(String... args){System.out.println("GGG");new FirstImplementation().doSomething();} }

翻譯自: https://www.javacodegeeks.com/2014/03/default-methods-an-approach-to-extend-legacy-code.html

總結(jié)

以上是生活随笔為你收集整理的默认方法一种扩展旧代码的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。