2009-05-12 17 views
14

Mi piace "indovinare" i nomi degli attributi dai metodi getter. Quindi 'getSomeAttribute' deve essere convertito in 'someAttribute'.Convertire caratteri singoli in stringa in lettere minuscole

Di solito io faccio una cosa del genere

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

abbastanza brutto, giusto? Di solito lo nascondo in un metodo, ma qualcuno conosce una soluzione migliore?

+0

Perché stai cercando di indovinare il nome della variabile? – Milhous

+0

Per un'applicazione di grandi dimensioni, desidero generare automaticamente una serie enorme di schemi wsdl e xml per inserire un'interfaccia SOAP accanto al JMS esistente. Piuttosto difficile in questo caso - Devo analizzare i file sorgente e riflettere le librerie ... Almeno c'è una convenzione di denominazione (personalizzata) per attributi e getter, quindi con il nome del metodo posso testare o riflettere alcuni campi –

+0

Se è possibile utilizzare refection , quindi è possibile ottenere i nomi delle variabili reali. – Milhous

risposta

13

Penso che la soluzione sia giusta. Non penso che ci sia un modo più semplice per farlo.

4

Il metodo uncapitalize di Commons Lang può aiutarti, ma non credo che la tua soluzione sia così cruda.

3

uncapitalize da commons lang sarebbe farlo:

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

Ho bisogno Commons Lang molto, ma se non ti piace quel vaso in più, è possibile copiare il metodo. Come puoi vedere, lo fanno come te:

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

Ciò produrrebbe "someattribute" invece di "someAttribute". –

+0

appena visto, riparato suggerendo commons lang –

+0

Penso che sia quello che ho intenzione di fare. Anche se è la stessa soluzione 'sotto il cofano'. Non posso votare, perché non ho ancora abbastanza reputazione. Quindi per favore accetta il mio pollice verboso! –

0

Mi sembra soddisfacente. Sì, sembra prolisso, ma considera quello che stai cercando di fare e quello che un altro programmatore potrebbe pensare se stessero cercando di capire cosa sta provando a fare questo codice. Se mai, lo renderei più lungo, aggiungendo quello che stai facendo (indovinando i nomi degli attributi dai metodi getter) come commento.

3

Date un'occhiata al JavaBeans API:

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

vedere anche decapitalize.

2

Vale la pena ricordare questo;

  • non tutti i metodi getXXX sono getter, ad es. double getSqrt (double x), void getup().
  • metodi che restituiscono booleano, iniziano con is e non prendono un argomento può essere un getter, ad es. boolean isActive().
2

Dato un buffer di caratteri, è possibile applicare il codice qui sotto:

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

Testato e funzioni :)

Problemi correlati