[英]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.