2016-04-22 15 views
1

Eine Entity-Klasse in meiner Anwendung Konvertieren erklärt eine numerische Konstante wieeine numerische Konstante auf einen konstanten String-Ausdruck

public static final int MAX_VALUE = 999; 

Diese Konstante bereits in verschiedenen Teilen der Anwendung verwendet wird.

Jetzt möchte ich diese Konstante in einem erholsamen Service in einer Parameter Annotation verwenden. Das Problem ist, dass die Annotation @DefaultValue einen String und nicht einen int erwartet. Also habe ich versucht String.valueOf unter Verwendung einer Zeichenfolge

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

zu bekommen, aber es nicht kompilieren, weil

Der Wert für Anmerkung Attribut DefaultValue.value ein konstanter Ausdruck sein muss

Can Ich verwende meine numerische Konstante irgendwie, um einen konstanten String-Ausdruck zu erhalten, oder muss ich "999" schreiben?

Antwort

2

Definieren Sie eine neue Konstante basierend auf der ersten vom Typ String und verwenden Sie diese in Ihrer Annotation.

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

Dann können Sie die folgende haben, ohne den Wert des max-Wert zu duplizieren:

@DefaultValue(PDCRuleMapping.MAX_VALUE_AS_STRING) final int upperBound; 
1

Ich glaube, Sie nur zwei Möglichkeiten:

  • entweder einen Stringliteral in die Anmerkung @DefaultValue("999")
  • oder eine Zeichenkettenkonstante deklarieren:

    Wenn die einzige Stelle, an der Sie diesen Wert in einer Annotation verwenden, in einer Klasse liegt, können Sie die Zeichenkette in dieser Klasse als private Konstante deklarieren.

Verwandte Themen