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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

嵌套类型的前5个用例

發(fā)布時(shí)間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌套类型的前5个用例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前幾天,在reddit上進(jìn)行了有趣的討論,即靜態(tài)內(nèi)部類(lèi)。 什么時(shí)候太多?

首先,讓我們回顧一下Java的基本歷史知識(shí)。 Java語(yǔ)言提供了四個(gè)級(jí)別的嵌套類(lèi) ,通過(guò)“ Java語(yǔ)言”,我的意思是這些構(gòu)造僅是“語(yǔ)法糖”。 它們?cè)趦H了解普通類(lèi)的JVM中不存在。

(靜態(tài))嵌套類(lèi)

class Outer {static class Inner {} }

在這種情況下, Inner完全獨(dú)立于Outer ,除了公共的共享名稱(chēng)空間。

內(nèi)部班

class Outer {class Inner {} }

在這種情況下, Inner實(shí)例對(duì)其所在的Outer實(shí)例具有隱式引用。 換句話說(shuō),沒(méi)有關(guān)聯(lián)的Outer實(shí)例就不會(huì)有Inner實(shí)例。

創(chuàng)建此類(lèi)實(shí)例的Java方法如下:

Outer.Inner yikes = new Outer().new Inner();

看起來(lái)很尷尬的東西很有道理。 考慮在Outer內(nèi)部的某個(gè)地方創(chuàng)建Inner實(shí)例:

class Outer {class Inner {}void somewhereInside() {// We're already in the scope of Outer.// We don't have to qualify Inner explicitly.Inner aaahOK;// This is what we're used to writing.aaahOK = new Inner();// As all other locally scoped methods, we can// access the Inner constructor by // dereferencing it from "this". We just// hardly ever write "this"aaahOK = this.new Inner();} }

請(qǐng)注意,就像public或abstract關(guān)鍵字一樣, static關(guān)鍵字對(duì)于嵌套接口是隱式的。 乍看之下,以下假設(shè)語(yǔ)法可能很熟悉……:

class Outer {<non-static> interface Inner {default void doSomething() {Outer.this.doSomething();}}void doSomething() {} }

……不可能寫(xiě)上面的東西。 除了缺少<non-static>關(guān)鍵字外,似乎沒(méi)有任何明顯的理由說(shuō)明“內(nèi)部接口”不可行。 我懷疑這是通常的情況–必須有一些與向后兼容和/或多重繼承有關(guān)的邊緣警告。

本地班

class Outer {void somewhereInside() {class Inner {}} }

本地類(lèi)可能是Java中鮮為人知的功能之一,因?yàn)樗鼈儙缀鯖](méi)有用處。 本地類(lèi)是命名類(lèi)型,其范圍僅擴(kuò)展到封閉方法。 顯而易見(jiàn)的用例是當(dāng)您想在該方法中多次重用這種類(lèi)型時(shí),例如在JavaFX應(yīng)用程序中構(gòu)造多個(gè)類(lèi)似的偵聽(tīng)器。

匿名班

class Outer {Serializable dummy = new Serializable() {}; }

匿名類(lèi)是只有一個(gè)實(shí)例的另一種類(lèi)型的子類(lèi)型。

嵌套類(lèi)的前5個(gè)用例

如果未在靜態(tài)上下文中定義它們,則所有匿名類(lèi),本地類(lèi)和內(nèi)部類(lèi)都保留對(duì)其封閉實(shí)例的引用。 如果讓這些類(lèi)的實(shí)例泄漏到它們的范圍之外,可能會(huì)造成很多麻煩。 在我們的文章中閱讀有關(guān)該麻煩的更多信息: 不要聰明:Double Curly Braces Anti Pattern 。

但是,通常您確實(shí)希望從該封閉實(shí)例中獲利。 具有某種可以在不公開(kāi)實(shí)際實(shí)現(xiàn)的情況下返回的“消息”對(duì)象可能非常有用:

class Outer {// This implementation is private ...private class Inner implements Message {@Overridepublic void getMessage() {Outer.this.someoneCalledMe();}}// ... but we can return it, being of// type MessageMessage hello() {return new Inner();}void someoneCalledMe() {} }

但是,對(duì)于(靜態(tài))嵌套類(lèi),沒(méi)有封閉范圍,因?yàn)镮nner實(shí)例完全獨(dú)立于任何Outer實(shí)例。 那么,使用這樣的嵌套類(lèi)而不是頂級(jí)類(lèi)型有什么意義呢?

1.與外部類(lèi)型的關(guān)聯(lián)

如果您想與全世界進(jìn)行交流,嘿,這種(內(nèi)部)類(lèi)型與這種(外部)類(lèi)型完全相關(guān),并且單獨(dú)使用沒(méi)有意義,那么您可以嵌套這些類(lèi)型。 例如,這是通過(guò)Map和Map.Entry完成的:

public interface Map<K, V> {interface Entry<K, V> {} }

2.從外部隱藏外部類(lèi)型

如果軟件包(默認(rèn))的可見(jiàn)性不足以滿足您的類(lèi)型的需求,則可以創(chuàng)建private static類(lèi),這些private static類(lèi)僅對(duì)其封裝類(lèi)型和該封裝類(lèi)型的所有其他嵌套類(lèi)型可用。 這實(shí)際上是靜態(tài)嵌套類(lèi)的主要用例。

class Outer {private static class Inner {} }class Outer2 {Outer.Inner nope; }

3.保護(hù)類(lèi)型

這確實(shí)是一個(gè)非常罕見(jiàn)的用例,但是有時(shí),在類(lèi)層次結(jié)構(gòu)中,您需要只希望對(duì)給定類(lèi)型的子類(lèi)型可用的類(lèi)型。 這是protected static類(lèi)的用例:

class Parent {protected static class OnlySubtypesCanSeeMe {}protected OnlySubtypesCanSeeMe someMethod() {return new OnlySubtypesCanSeeMe();} }class Child extends Parent {OnlySubtypesCanSeeMe wow = someMethod(); }

4.模擬模塊

與Ceylon不同,Java沒(méi)有一流的模塊 。 使用Maven或OSGi,可以向Java的構(gòu)建(Maven)或運(yùn)行時(shí)(OSGi)環(huán)境中添加一些模塊化行為,但是如果要用代碼表示模塊,則實(shí)際上是不可能的。

但是,您可以使用靜態(tài)嵌套類(lèi)按照約定建立模塊。 讓我們看一下java.util.stream包。 我們可以將其視為一個(gè)模塊,并且在此模塊中,我們有幾個(gè)“子模塊”或類(lèi)型組,例如內(nèi)部java.util.stream.Nodes類(lèi),其大致如下所示:

final class Nodes {private Nodes() {}private static abstract class AbstractConcNode {}static final class ConcNode {static final class OfInt {}static final class OfLong {}}private static final class FixedNodeBuilder {}// ... }

所有java.util.stream包都可以使用其中一些Nodes東西,因此我們可以說(shuō),它的編寫(xiě)方式如下:

  • 合成的java.util.stream.nodes子包,僅對(duì)java.util.stream “模塊”可見(jiàn)
  • 幾個(gè)java.util.stream.nodes.*類(lèi)型,也僅對(duì)java.util.stream “模塊”可見(jiàn)
  • 合成java.util.stream.nodes包中的幾個(gè)“頂級(jí)”函數(shù)(靜態(tài)方法)

對(duì)我來(lái)說(shuō)看起來(lái)很像錫蘭!

5.外觀原因

最后一點(diǎn)很無(wú)聊。 或者有些人可能會(huì)覺(jué)得有趣 。 這是關(guān)于品味或易于寫(xiě)作的事情。 有些類(lèi)是如此之小且無(wú)關(guān)緊要,將它們寫(xiě)在另一個(gè)類(lèi)中更容易。 為您保存一個(gè).java文件。 為什么不。

結(jié)論

在Java 8時(shí)代,考慮Java的非常古老的功能,該語(yǔ)言可能不會(huì)被證明是非常令人興奮的。 靜態(tài)嵌套類(lèi)是一些小眾用例的很好理解的工具。

但是,本文的重點(diǎn)是這個(gè)。 每次嵌套類(lèi)時(shí),如果您絕對(duì)不需要引用封閉的實(shí)例,請(qǐng)確保將其設(shè)為static 。 您永遠(yuǎn)不知道何時(shí)該引用會(huì)在生產(chǎn)中使您的應(yīng)用程序崩潰 。

翻譯自: https://www.javacodegeeks.com/2015/02/top-5-use-cases-for-nested-types.html

總結(jié)

以上是生活随笔為你收集整理的嵌套类型的前5个用例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: 久久视频一区 | fexx性欧美| 色网站入口 | 精品一区二区三区久久久 | 国产又爽又猛又粗的视频a片 | 国产精品久久综合视频 | aaa国产精品 | 大乳女喂男人吃奶 | 免费啪啪网 | 久久中文字幕一区二区 | 日韩在线一二三区 | 欧美综合视频在线观看 | 欧美日韩成人在线视频 | 亚洲AV成人无码一二三区在线 | 2021国产精品视频 | 天天狠天天插天天透 | 少妇人妻偷人精品无码视频新浪 | 久久久久久18 | 美女扒开腿免费视频 | 神马影院午夜伦理 | 亚洲熟女一区二区三区 | 日本一区二区高清免费 | av网站大全在线观看 | 国产视频精品久久 | 手机看片1024国产 | 动漫美女被吸奶 | 九月婷婷丁香 | 久久国产柳州莫菁门 | 国产 丝袜 欧美中文 另类 | 性色欲网站人妻丰满中文久久不卡 | 黄色片在线播放 | 四川丰满少妇被弄到高潮 | 神马午夜av| 日韩在线资源 | 51av视频| 欧美亚洲网站 | 天天爱夜夜操 | 少妇做爰免费视看片 | 欧美放荡办公室videos4k | 91久久| 香蕉视频成人在线 | av在线视屏 | 色天天| 美日韩黄色片 | 秋霞视频一区二区 | 极品女神无套呻吟啪啪 | 一卡二卡在线观看 | 亚洲欧美日韩国产 | 爱涩av| 国产一区二区在线播放 | 久久久久久久久久久99 | 九九综合久久 | 国产无套精品一区二区三区 | 51久久 | 欧美黑人一级爽快片淫片高清 | 国产女18毛片多18精品 | 亚洲第三区 | 91尤物在线| 欧美视频一区二区 | 久视频在线观看 | 人人看av | 麻豆综合| 69视频在线观看 | 午夜久久久久久久 | 国产精品日韩一区 | 激情中文网| 四虎国产精品永久免费观看视频 | 天堂成人在线观看 | 高潮在线视频 | 国产精品高潮呻吟久久av野狼 | 萌白酱喷水视频 | 欧美精品 日韩 | 日本一区二区三区免费在线观看 | 久天堂| 亚洲国产精品无码观看久久 | 日韩一三区 | 熊猫电影yy8y全部免费观看 | 日本黄大片在线观看 | 久久久二区 | 环太平洋3:泰坦崛起 | 国产一区二区三区视频在线 | www.brazzers.com| 特一级黄色片 | 久久久久www| 57pao成人国产永久免费视频 | 中文字幕一区二区三区5566 | 欧美用舌头去添高潮 | 一级大片黄色 | 成人综合精品 | a级片在线免费观看 | 2025国产精品视频 | 三级国产三级在线 | 视频在线观看免费 | 中文字幕在线免费观看 | 欧美理伦少妇2做爰 | 青青av| 男人干女人视频 | 特级西西444www大精品视频免费看 | 亚洲一区二区三区综合 |