亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從Constant java為注釋提供值

如何從Constant java為注釋提供值

呼喚遠方 2019-07-30 15:52:50
如何從Constant java為注釋提供值我認為這在Java中是不可能的,因為注釋及其參數在編譯時被解析。我有一個如下界面,public interface FieldValues {    String[] FIELD1 = new String[]{"value1", "value2"};}和另一個班級,@SomeAnnotation(locations = {"value1", "value2"})public class MyClass {    ....}我用注釋標記了很多類,我想知道我是否可以避免在每個注釋中指定字符串而我更愿意使用@SomeAnnotation(locations = FieldValues.FIELD1)public class MyClass {    ....}然而,這給出了編譯錯誤,例如注釋值應該是數組初始化器等。有人知道如何使用String常量或String []常量來為注釋提供值嗎?
查看完整描述

3 回答

?
浮云間

TA貢獻1829條經驗 獲得超4個贊

編譯常量只能是基元和字符串:

15.28。常數表達式

編譯時常量表達式是表示基本類型的值的表達式或不突然完成的字符串,僅使用以下內容組成:

  • 原始類型的文字和類型的文字?String

  • 轉換為基本類型和轉換為類型?String

  • [...]運營商[...]

  • 括號表達式,其包含的表達式是常量表達式。

  • 引用常量變量的簡單名稱。

  • TypeName表單的限定名稱。引用常量變量的標識符。

實際上在java中沒有辦法保護數組中的項目。在運行時,有人總能這樣做FieldValues.FIELD1[0]="value3",因此如果我們看得更深,那么數組就不能真正保持不變。


查看完整回答
反對 回復 2019-07-30
?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

您可以使用常量(即靜態的最終變量)作為注釋的參數。作為一個簡單的例子,我經常使用這樣的東西:

import org.junit.Test;import static org.junit.Assert.*;public class MyTestClass{
    private static final int TEST_TIMEOUT = 60000; // one minute per test

    @Test(timeout=TEST_TIMEOUT)
    public void testJDK()
    {
        assertTrue("Something is very wrong", Boolean.TRUE);
    }}

請注意,可以將TEST_TIMEOUT常量直接傳遞給注釋。

另外,我不記得曾經用數組試過這個,所以你可能會遇到一些問題,與Java變量相比,數組如何表示為注釋參數?但至于問題的其他部分,你絕對可以使用一個常量String而沒有任何問題。

編輯:我剛剛嘗試使用String數組,并沒有遇到你提到的問題 - 但編譯器確實告訴我“屬性值必須是常量”,盡管數組被定義為public static final String[]。也許它不喜歡數組是可變的這個事實?嗯...


查看完整回答
反對 回復 2019-07-30
?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

在示例中,您沒有為它提供數組。以下編譯正常:

   public @interface SampleAnnotation {
        String[] sampleValues();
    }

    public class Values {
        public static final String v1 = "A";
        public static final String v2 = "B";

        @SampleAnnotation(sampleValues = { v1, v2 })
        public void foo() {
        }
    }


查看完整回答
反對 回復 2019-07-30
  • 3 回答
  • 0 關注
  • 604 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號