Откажитесь от представления String и создайте реальное перечисление.
public enum DataType {
STRING,
BOOLEAN,
INTEGER;
}
Таким образом, вам больше не придется выполнять сравнение строк предыдущей переменной String dataType
, чтобы определить, находится ли она в перечислении.Кроме того, это также делает невозможным присвоение недопустимого значения переменной-члену dataType
, и поскольку перечисления гарантированно будут одиночными в загрузчике классов, это также экономит объем памяти.
Этостоит усилий, чтобы изменить свой код для использования перечислений.Однако, предполагая, что вы не можете, вы можете, по крайней мере, изменить аннотацию на использование перечислений.
@ValidateString(DataType.STRING) String dataType;
, и таким образом ваша аннотация ValidateString
получит выгоду от перечислений, даже если остальныекод не работает.
Теперь при крайне редкой вероятности того, что вы вообще не можете использовать перечисление, вы можете установить статические открытые целые числа, которые отображают каждое принятое значение.
public class DataType {
public static final int STRING = 1;
public static final int BOOLEAN = 2;
...
}
Однако, если вы используете String для параметра аннотации, у нас нет системы проверки типов, которая распространяется на тип, чтобы указать, что разрешены только определенные значения.Другими словами, Java не имеет возможности сделать что-то вроде этого:
public int<values=[1,3,5,7..9]> oddInt;
, что приведет к ошибке, если вы попытаетесь назначить
oddInt = 4;
Почему это важно?Потому что, если он не применяется к обычной Java, он не может применяться к перечислению, которое реализовано в обычных классах Java.