簡體   English   中英

將數字常量轉換為常量字符串表達式

[英]Converting a numeric constant to a constant string expression

我的應用程序中的實體類聲明了一個數字常量,如

public static final int MAX_VALUE = 999;

此常量已在應用程序的不同部分中使用。

現在我想在參數注釋中的寧靜服務中使用這個常量。 問題是注解@DefaultValue需要一個字符串而不是一個int。 所以我嘗試使用String.valueOf來獲取字符串

@DefaultValue(String.valueOf(PDCRuleMapping.MAX_VALUE)) final int upperBound,

但它不會編譯,因為

注釋屬性 DefaultValue.value 的值必須是常量表達式

我可以重用我的數字常量以某種方式獲得一個常量字符串表達式,還是我必須寫"999"

到目前為止,唯一對我有用的解決方法是定義一個 String 常量,如下所示:

public static final String MAX_VALUE_AS_STRING = "" + MAX_VALUE;
@DefaultValue(MAX_VALUE_AS_STRING) final int upperBound;

或者,您可以直接在注釋中使用字符串連接:

@DefaultValue("" + MAX_VALUE) final int upperBound;

請記住,此上下文中所需的常量表達式不允許方法調用,僅允許運算符。

我認為你只有兩個選擇:

  • 在注釋中使用字符串文字@DefaultValue("999")
  • 或聲明一個字符串常量:

     public static final int MAX_VALUE = 999; private static final String MAX_VALUE_STRING = "" + MAX_VALUE; @DefaultValue(MAX_VALUE_STRING)

    如果您在注釋中使用該值的唯一地方是在一個類中,您可能希望在該類中將字符串常量聲明為私有。

基於String類型的第一個常量定義一個新常量,並在注釋中使用該常量。

public static final int MAX_VALUE = 999;
public static final String MAX_VALUE_AS_STRING = String.valueOf(MAX_VALUE);

然后您可以擁有以下內容,而無需復制最大值的值:

@DefaultValue(PDCRuleMapping.MAX_VALUE_AS_STRING) final int upperBound;

暫無
暫無

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

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