Zanja la representación de cadena, y hacer una enumeración real.
public enum DataType {
STRING,
BOOLEAN,
INTEGER;
}
De esta manera se evita la vez tener que hacer la comparación de cadenas de la String dataType
variable anterior para determinar si está en la enumeración. Por otro lado, también hace que sea imposible asignar un valor no válido a la variable miembro dataType
y dado que las enumeraciones están garantizadas como singleton dentro del cargador de clases, también ahorra espacio en la memoria.
Vale la pena el esfuerzo de cambiar el código para usar enumeraciones. Sin embargo, suponiendo que no puede, al menos puede cambiar la anotación para usar enumeraciones.
@ValidateString(DataType.STRING) String dataType;
y de esa manera su ValidateString
anotación al menos llega a beneficiarse de las enumeraciones, aunque el resto del código no lo hace.
Ahora, con la muy rara posibilidad de que no pueda usar una enumeración, puede establecer enteros públicos estáticos, que mapean cada valor aceptado.
public class DataType {
public static final int STRING = 1;
public static final int BOOLEAN = 2;
...
}
Sin embargo, si se utiliza una cadena para el parámetro de anotación, no tenemos un sistema de comprobación de tipos que se extiende en el tipo de especificar que sólo los valores particulares están permitidos. En otras palabras, Java no tiene la capacidad de hacer algo como esto:
public int<values=[1,3,5,7..9]> oddInt;
que un error si se ha intentado asignar
oddInt = 4;
¿Por qué es esto importante? Porque si no se aplica a Java normal, entonces no se puede aplicar a la enumeración que se implementa en clases regulares de Java.
¿Cuál es el "negocio" real necesita? ¿Qué está tratando de resolver? (Estoy seguro de que en realidad no necesitas hacer esto exactamente; esta es solo una forma de hacer algo) – Bohemian