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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

注释,无处不在的注释

發布時間:2023/12/3 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 注释,无处不在的注释 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

十年前的2004年 , Java 1.5開始提供注釋。 很難想象沒有此功能的代碼。 實際上,首先引入了注釋,以減輕開發人員編寫繁瑣的樣板代碼的痛苦,并使代碼更具可讀性。 考慮一下J2EE 1.4(沒有可用的注釋)和Java EE5。注釋的采用通過消除所有配置XML大大簡化了Java EE應用程序的開發。 即使在今天,更多的注釋仍被添加到最新版本的Java EE中。 這樣做的目的是減輕開發人員的負擔并提高生產率。 其他技術和框架也廣泛使用它們。


到處都有注釋

讓我們看一個有關注釋如何簡化代碼的示例(摘自我有關JPA實體圖的文章 ):

電影.java

@Entity @Table(name = "MOVIE_ENTITY_GRAPH") @NamedQueries({@NamedQuery(name = "Movie.findAll", query = "SELECT m FROM Movie m") }) @NamedEntityGraphs({@NamedEntityGraph(name = "movieWithActors",attributeNodes = {@NamedAttributeNode("movieActors")}),@NamedEntityGraph(name = "movieWithActorsAndAwards",attributeNodes = {@NamedAttributeNode(value = "movieActors", subgraph = "movieActorsGraph")},subgraphs = {@NamedSubgraph(name = "movieActorsGraph",attributeNodes = {@NamedAttributeNode("movieActorAwards")})}) }) public class Movie implements Serializable {@Idprivate Integer id;@NotNull@Size(max = 50)private String name;@OneToMany@JoinColumn(name = "ID")private Set<MovieActor> movieActors;@OneToMany(fetch = FetchType.EAGER)@JoinColumn(name = "ID")private Set<MovieDirector> movieDirectors;@OneToMany@JoinColumn(name = "ID")private Set<MovieAward> movieAwards; }

等一下! 簡化嗎? 真? 注釋不應該使我的代碼更具可讀性嗎? 此示例具有比實際代碼更多的注釋。 公平地說,我不包括獲取器和設置器。 同樣,某些帶注釋的代碼可以更好地壓縮,但這會使代碼更難閱讀。 當然,這是一個極端的情況。 無論如何,我很高興,因為我獲得了“年度注釋狂”稱號 。 謝謝盧卡斯!

我們非常依賴注釋,以至于最終濫用它們。 有趣的是,在某些情況下,批注引起了他們打算解決的相同問題。

如果?

讓我們像這樣重寫前面的示例:

電影.java

@MovieEntity @FindAll @LoadWithActors @LoadWithActorsAndAwards public class Movie implements Serializable {@Idprivate Integer id;@Nameprivate String name;@MovieActorsprivate Set<MovieActor> movieActors;@MovieDirectorsprivate Set<MovieDirector> movieDirectors;@MovieAwardsprivate Set<MovieAward> movieAwards; }

它肯定看起來更具可讀性。 但是這些注釋不存在。 他們來自哪里?

@LoadWithActors

LoadWithActors.java

@NamedEntityGraph(name = "movieWithActors",attributeNodes = {@NamedAttributeNode("movieActors")} ) public @interface LoadWithActors {}

@LoadWithActorsAndAwards

LoadWithActorsAndAwards.java

@NamedEntityGraph(name = "movieWithActorsAndAwards",attributeNodes = {@NamedAttributeNode(value = "movieActors", subgraph = "movieActorsGraph")},subgraphs = {@NamedSubgraph(name = "movieActorsGraph",attributeNodes = {@NamedAttributeNode("movieActorAwards")})} ) public @interface LoadWithActorsAndAwards {}

其余的依次類推。 你有感覺。 這個想法是將注釋元數據提取并分組到您自己的自定義注釋中。 然后,您的注釋可以用于表示代碼中所有帶注釋的數據,從而更易于理解。 就像Java 8 Lambdas一樣,讀起來就像問題聲明一樣。

只是另一個例子:

WoWBusinessBean.java

@Named @Stateless @TransactionAttribute(TransactionAttributeType.SUPPORTS) @ApplicationPath("/resources") @Path("wowauctions") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public class WoWBusinessBean extends Application implements WoWBusiness {}

改寫:

WoWBusinessBean.java

@RestStatelessBean("wowauctions") public class WoWBusinessBean extends Application implements WoWBusiness {}

@RestStatelessBean

RestStatelessBean

@Named @Stateless @TransactionAttribute(TransactionAttributeType.SUPPORTS) @ApplicationPath("/resources") @Path("#{path}") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public @interface RestStatelessBean {String value() default "#{path}"; }

通常,我只編寫一次這些注釋來定義POJO的行為,而不再關注它們。 如果我可以為所有無狀態休息服務重用一個注釋,那將有多酷?

另一個不錯的效果是,注釋配置元數據沒有直接綁定在代碼中。 相反,它被抽象為另一個注釋。 在這種情況下,有可能在編譯/運行時中覆蓋或替換這些值。

元注釋

我最初是由David Blevins聽說過這個概念的。 他在“ 元注釋”中寫了一篇關于這些想法的很好的文章,甚至寫了一個可能的實現 。

為注釋繼承,抽象和封裝提供簡單的Java SE支持會很方便。 這是所有現有技術處理注釋方式的重大轉變。 只有每個人都開始支持這種行為才有意義。

有人可能會問,我們真的需要此功能嗎? 讓我們嘗試權衡一些利弊:

優點

  • 簡化代碼。
  • 注釋重用。
  • 注釋配置不直接與代碼綁定。 值可以被覆蓋。

缺點

  • 另一層抽象。
  • 自由地創建自定義注釋可以掩蓋真實行為。
  • 可能會遇到某種多重繼承陷阱。

結論

在可預見的將來,這種元注釋不太可能在Java SE中提供。 在Java 9中,大多數焦點都放在Jigsaw中。 除了值類型和泛型專業化之外,關于Java 10的信息很少。 實際上,對于純Java SE,所有這些注釋問題都不是真正的問題。

源文件中存在的批注數量正成為有關可讀性和可維護性的問題。 對于Java EE和其他類似技術尤其如此。 考慮一下HTML和CSS。 如果您正在開發HTML頁面,而只需要幾個CSS樣式,則通常將它們內聯到元素中或直接將它們包括在頁面中。 如果開始使用太多樣式,則可以將它們提取到外部CSS文件中,然后應用樣式。 我確實認為必須通過采用元注釋或其他方式來完成某些工作。 你還有其他建議嗎? 請分享!

資源資源

不要忘記查看David Blevins關于Meta Annotations的帖子。 他的解釋比我更好,包括技術細節。

也是帶有元注釋的JavaOne EJB演示文稿,由David Blevins討論了這些想法。

還有什么比聽大衛·布萊文斯本人更好的呢? Java EE 7,無限可擴展性遇到無限重用 。

翻譯自: https://www.javacodegeeks.com/2014/12/annotations-annotations-everywhere.html

總結

以上是生活随笔為你收集整理的注释,无处不在的注释的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 操操操操网 | 色女人网 | 国产区精品区 | 婷婷九月综合 | 97视频在线看| 无码人妻aⅴ一区二区三区玉蒲团 | 日本丰满少妇 | 久久久久一级片 | 亚州av片 | 一级特黄录像免费看 | 亚洲精品久久久久久久蜜桃臀 | 久久久久久久久久久免费 | 久久观看最新视频 | 成人欧美一区二区三区在线观看 | 香蕉在线影院 | 小嫩嫩12欧美 | 精品国精品国产 | 日本一区二区视频在线观看 | 99re国产精品 | 一本色道久久88 | 91爱看 | 久久激情五月 | 国产秋霞| 亚洲在线视频免费观看 | 国产又黄又骚 | 色婷婷91| 亚洲精品三级 | 国产老女人乱淫免费可以 | 欧美xxxx黑人xyx性爽 | www国产com| 国产一区二区三区四区五区 | 久久不卡影院 | 全黄一级男人和女人 | 99色播| 五月天综合在线 | 色吧久久 | 好吊视频在线观看 | 北条麻妃一二三区 | 动漫美女被吸奶 | 中国女人毛茸茸 | 国产又黄又粗又猛又爽视频 | 老色鬼网站 | 亚色中文字幕 | 91免费视 | 欧美一级片免费观看 | 91av入口| 涩涩av| 伊人久久大香线蕉 | 国产精品久久久久久久9999 | 欧美老少做受xxxx高潮 | 久久精品免费播放 | 99热99| 天天天干干干 | 黄色正能量网站 | 女女互慰吃奶互揉调教捆绑 | 国产又粗又猛又黄又爽无遮挡 | 毛片a区| 午夜激情网站 | 日本一区二区欧美 | 久久久无码18禁高潮喷水 | 成人免费视频网站在线看 | 综合 欧美 亚洲日本 | 人人草人人插 | 好吊操av | www,99| 中文在线日本 | 国产三级精品在线 | 人妻av一区二区三区 | 牛牛精品一区二区 | 欧美日韩精品在线观看视频 | 国产成人精品影视 | 国产一二三区免费视频 | 91免费观看视频在线 | 国产偷拍一区二区三区 | 麻豆视频二区 | 欧美福利第一页 | 中出精品| 四虎网站在线播放 | 在线观看一区二区三区四区 | 葵司ssni-879在线播放 | 无码人妻av免费一区二区三区 | 色天天av| 日本少妇作爱视频 | 日韩欧美一级二级 | 91欧美激情一区二区三区成人 | 秋霞欧美一区二区三区视频免费 | 激情图片在线视频 | 奇米影视久久久 | 中文字幕一区二区在线播放 | 波多野结衣久久 | 免费色av | 日本女人一区二区三区 | jzjzjzjzj亚洲成熟少妇 | 视频区图片区小说区 | 国产午夜精品在线观看 | 国产一区h| 欧美在线一区视频 | 久久久久久久久久久97 | 无码av免费精品一区二区三区 |