Esta funcionalidad es requerida, para obtener dinamicamente el nombre de la propiedad asociada al methodo getter, sin embargo, puede complicarse, debido a que el estandard puede aceptar el prefijo is o el prefijo get
01: package test; 02: 03: public class Test { 04: public String getProperty(String methodName) { 05: assert methodName.startsWith("get") || methodName.startsWith("is"); 06: int index = methodName.charAt(0) == 'i' ? 2 : 3;// cache 07: char c = Character.toLowerCase(methodName.charAt(index));// cache 08: int l = methodName.length(); 09: if ((index == 3 && l > 4) || (index == 2 && l > 3)) { 10: return new StringBuilder(l-index).append(c).append( 11: methodName.substring(index + 1)).toString(); 12: } else { 13: return new String(new char[] { c }); 14: } 15: } 16: } 17:
Explicacion:
06-06: Determinar donde inicia el nombre de la propiedad.
07-07: El primer caracter del nombre de la propiedad, lo convertimos a minuscula
09-14: Determinamos si el nombre de la propiedad, esta formado por 1 o mas letras.
Optimizacion:
- Se realiza cache de variables, como el indice, para evitar calcularlo en cada ocasion
- Cuando el nombre de la propiedad esta formado por un solo caracter se construye una cadena formada por ese caracter exclusivamente, en caso contrario, se forma la cadena correspondiente.
- Cuando el nombre de la propiedad esta formado por mas de un caracter, se crea un StringBuilder de longitud exacta.
No hay comentarios.:
Publicar un comentario