2009-05-12 15 views
14

Me gusta 'adivinar' los nombres de los atributos de los métodos getter. Entonces 'getSomeAttribute' se convertirá en 'someAttribute'.Convertir un solo carácter en Cadena en minúscula

Por lo general hago algo así como

String attributeName = Character.toLowerCase(methodName.indexOf(3)) 
         + methodName.substring(4); 

bastante feo, ¿verdad? Normalmente lo escondo en un método, pero ¿alguien sabe una mejor solución?

+0

Por qué estás tratando de adivinar el nombre de la variable? – Milhous

+0

Para una aplicación grande, quiero generar automáticamente un gran conjunto de esquemas wsdl y xml para poner una interfaz SOAP junto al JMS existente. En este caso, es bastante difícil: tengo que analizar los archivos fuente y reflejar las bibliotecas ... Al menos hay una convención de nomenclatura (personalizada) para los atributos y getter, así que con el nombre del método puedo probar o reflejar algunos campos –

+0

Si puede usar refection , entonces puedes obtener los nombres de las variables reales. – Milhous

Respuesta

13

Creo que su solución está bien. No creo que haya una manera más fácil de hacerlo.

4

El método uncapitalize de Commons Lang te ayudará, pero no creo que tu solución sea tan cruda.

3

uncapitalize de commons lang lo haría:

String attributeName = StringUtils.uncapitalize(methodName.substring(3)); 

necesito Commons Lang mucho, pero si no lo hace así frasco adicional, usted podría copiar el método. Como puede ver en él, lo hacen como usted:

public static String uncapitalize(String str) { 
    int strLen; 
    if (str == null || (strLen = str.length()) == 0) { 
     return str; 
    } 
    return new StringBuffer(strLen) 
     .append(Character.toLowerCase(str.charAt(0))) 
     .append(str.substring(1)) 
     .toString(); 
} 
+0

Esto produciría "someattribute" en lugar de "someAttribute". –

+0

acaba de ver, solucionó eso al sugerir commons lang –

+0

Creo que eso es lo que voy a hacer. A pesar de que es la misma solución 'bajo el capó'. No puedo votar, porque todavía no tengo suficiente reputación. ¡Por favor acepte mis verbosos pulgares arriba! –

0

Me parece bien. Sí, parece detallado, pero tenga en cuenta lo que intenta hacer, y lo que otro programador pensaría si trataran de entender lo que este código está tratando de hacer. En todo caso, lo haría más largo, agregando lo que estás haciendo (adivinando los nombres de los atributos de los métodos getter) como un comentario.

3

Tener un vistazo a la JavaBeans API:

BeanInfo info = Introspector.getBeanInfo(bean 
     .getClass(), Object.class); 
for (PropertyDescriptor propertyDesc : info 
     .getPropertyDescriptors()) { 
    String name = propertyDesc.getName(); 
} 

Véase también decapitalize.

2

Vale la pena recordar eso;

  • no todos los métodos de getXXX son getters p. doble getSqrt (doble x), void getup().
  • métodos que devuelven boolean, comienzan con is y no toman un argumento pueden ser getter, p. boolean isActive()
2

Dado un búfer de caracteres, se puede aplicar el código de abajo:

int i = 0; 
for(char x : buffer) { 
    buffer[i] = Character.toLowerCase(x); 
    i++; 
} 

Probado y funciona :)

Cuestiones relacionadas