簡體   English   中英

注解定義拋出錯誤:類型不兼容:int[] 無法轉換為 int

[英]Annotation definition throwing error: incompatible types: int[] cannot be converted to int

我有一個以這種方式定義的注釋。

    class Lit {
      public static final int[] LIT = {1, 2};
    }

    @interface Buggy {
      int[] vals() default Lit.LIT;
    } 

我在編譯error: incompatible types: int[] cannot be converted to int

雖然這編譯得很好:

   @interface Buggy {
    int[] vals() default {1, 2};
   } 

可能的原因是什么?

您收到的錯誤消息信息量不大,但實際原因是注釋默認值必須保持不變,但此處並非如此。

以下示例可行,因為 LIT 是常量,因此您無法更改其值:

public class Lit {
    public static final int LIT = 1;
}

@interface Buggy {
    int vals() default Lit.LIT;
}

因此,對於原始類型,上述方法可行,但不適用於 arrays,因為 arrays 是可變的,即,對於您的情況,我可以在代碼中的任何位置修改 LIT 的值,例如LIT[1] = 5 ,然后它不會有原來的價值。

但是,如果您將其聲明為

int[] vals() default {1, 2};

它會起作用,因為沒有可變數組變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM