第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么不能在Java中擴(kuò)展注釋?

為什么不能在Java中擴(kuò)展注釋?

元芳怎么了 2019-08-01 16:23:45
為什么不能在Java中擴(kuò)展注釋?我不明白為什么Java注釋中沒有繼承,就像Java類一樣。我認(rèn)為這將非常有用。例如:我想知道給定的注釋是否是驗(yàn)證器。通過繼承,我可以反復(fù)地瀏覽超類,以了解此注釋是否擴(kuò)展了ValidatorAnnotation。否則,我該怎樣才能做到這一點(diǎn)?那么,任何人都可以給我這個(gè)設(shè)計(jì)決定的理由嗎?
查看完整描述

4 回答

?
米脂

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊

關(guān)于它沒有這樣設(shè)計(jì)的原因你可以在JSR 175設(shè)計(jì)常見問題中找到答案,它說:

為什么不支持注釋子類型(一個(gè)注釋類型擴(kuò)展另一個(gè))?

它使注釋類型系統(tǒng)復(fù)雜化,并且使編寫“特定工具”變得更加困難。

...

“特定工具” - 查詢?nèi)我馔獠砍绦虻囊阎⑨岊愋偷某绦?。例如,存根發(fā)生器就屬于這一類。這些程序?qū)⒆x取帶注釋的類而不將它們加載到虛擬機(jī)中,但會(huì)加載注釋接口。

所以,是的,我想,原因是它只是KISS。無論如何,似乎這個(gè)問題(以及許多其他問題)正在作為JSR 308的一部分進(jìn)行研究,你甚至可以找到一個(gè)已經(jīng)由Mathias Ricken開發(fā)的具有此功能的替代編譯器。


查看完整回答
反對 回復(fù) 2019-08-01
?
慕運(yùn)維8079593

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊

可擴(kuò)展注釋將有效地增加指定和維護(hù)另一種類型系統(tǒng)的負(fù)擔(dān)。這將是一個(gè)相當(dāng)獨(dú)特的類型系統(tǒng),因此您不能簡單地應(yīng)用OO類型范例。

在將多態(tài)性和繼承引入注釋時(shí),請仔細(xì)考慮所有問題(例如,當(dāng)子注釋更改元注釋規(guī)范(例如保留)時(shí)會(huì)發(fā)生什么?)

所有這些增加了用例的復(fù)雜性?

您想知道給定的注釋是否屬于某個(gè)類別?

試試這個(gè):

@Target(ElementType.ANNOTATION_TYPE)public @interface Category {
    String category();}@Category(category="validator")public @interface MyFooBarValidator {}

如您所見,您可以使用提供的工具輕松地對注釋進(jìn)行分組和分類,而不會(huì)造成過度的痛苦。

因此,KISS是不向Java語言引入元類型系統(tǒng)的原因。

[ps編輯]

我只使用String作為演示,并考慮到開放式元注釋。對于您自己的給定項(xiàng)目,您顯然可以使用類別類型的枚舉,并為給定的注釋指定多個(gè)類別(“多重繼承”)。請注意,這些值完全是假的,僅用于演示目的:

@Target(ElementType.ANNOTATION_TYPE)public @interface Category {
    AnnotationCategory[] category();}public enum AnnotationCategory {
    GENERAL,
    SEMANTICS,
    VALIDATION,
    ETC}@Category(category={AnnotationCategory.GENERAL, AnnotationCategory.SEMANTICS})public @interface FooBarAnnotation {}


查看完整回答
反對 回復(fù) 2019-08-01
?
大話西游666

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊

從某種意義上說,你已經(jīng)擁有了Annotations - meta Annotations。如果使用元信息注釋注釋,則在許多方面等同于擴(kuò)展其他接口。注釋是接口,因此多態(tài)性并沒有真正發(fā)揮作用,并且由于它們本質(zhì)上是靜態(tài)的,因此不能進(jìn)行運(yùn)行時(shí)動(dòng)態(tài)調(diào)度。

在驗(yàn)證器示例中,您可以只在注釋上獲取帶注釋的類型,并查看它是否具有驗(yàn)證器元注釋。

我可以看到繼承有用的唯一用例是,如果你想能夠通過超類型獲得注釋,但這會(huì)增加一大堆復(fù)雜性,因?yàn)榻o定的方法或類型可能有兩個(gè)這樣的注釋,意味著必須返回一個(gè)數(shù)組而不是只返回一個(gè)對象。

所以我認(rèn)為最終的答案是用例是深?yuàn)W的,并且使更多標(biāo)準(zhǔn)用例復(fù)雜化,使其不值得。


查看完整回答
反對 回復(fù) 2019-08-01
  • 4 回答
  • 0 關(guān)注
  • 748 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)