2012-05-15 8 views
48

Sono consapevole che utilizzando Context e un metodo getClass().getName() posso ottenere una stringa che rappresenta il nome completo della classe, ad esempio com.package1.package2.MainActivity.Come ottenere solo il nome della classe, non il percorso completo?

Come posso ottenere solo l'ultima parte, solo il nome della classe? In questo caso sarebbe MainActivity stringa.

Posso farlo con un semplice metodo split(), ma forse c'è un modo migliore, più affidabile.

risposta

122

Questo è tutto ciò che serve.

MainActivity.this.getClass().getSimpleName(); 
+1

Questa è la cosa giusta. 'GetLocalClassName()' restituirà qualsiasi nome di pacchetto all'interno della radice dell'app. Restituisce solo il nome della classe, non importa se è in root o in qualche altro pacchetto. – sandalone

1

Indipendentemente dal modo in cui lo si esegue, è necessario eseguire un'operazione aggiuntiva su getClass. Mi raccomando questo corso scissione:

String className = xxx.getClass(); 
int pos = className.lastIndexOf ('.') + 1; 
String onlyClass = className.substring(pos); 
+0

leggere l'ultima riga del suo post che vuole altro poi dividere (sottostringa) –

+1

Va bene, non ho usato split. – Rawkode

+0

@Rawkode C'è un modo migliore. Questo è più sicuro dell'uso di 'split' o' substring'. – sandalone

14

di ottenere solo il nome della classe, non il percorso completo si userà questa espressione:

String className = this.getLocalClassName(); 
//or 
String className = getBaseContext().getLocalClassName(); 
//or 
String className = getApplicationContext().getLocalClassName(); 
+2

Ogni giorno è un giorno di scuola, bella scoperta :-) – Rawkode

+1

Sì, odio per essere così presto dopo aver postato una domanda, ma è meglio che lo posto in questo modo piuttosto che eliminare una domanda. – sandalone

+0

non fare affidamento su entrambi i 3 se si utilizza l'API vecchia, verrà restituito testo nullo o inutile. Per me solo getClass().getName() funziona – djdance

5

In alternativa, è possibile utilizzare:

private static final String TAG = MainActivity.class.getSimpleName(); 
0

Nessun altre soluzioni lavorano per me, so perché. Sto usando

this.getClass().getName().replace("$",".").split("\\.")[3] 

sv: in una stringa, e puoi usarlo in discussioni e ascoltatori.

(in listeres ottengo qualcosa come com.djdance.android.main $ 53)

0

Se si desidera ottenere il nome di fuori della classe è possibile chiamare:

MainActivity.class.getSimpleName() 

in questo modo puoi evitare di rendere statica la tua classe.

1
  1. Se avete bisogno di nome di classe all'interno di un metodo, utilizzare getLocalClassName()

  2. Se avete bisogno di nome della classe di fuori di un metodo, utilizzare getClass().getSimpleName()

  3. Se si desidera riutilizzare il nome di classe in più metodi all'interno della stessa classe, quindi utilizzare private final String TAG = getClass().getSimpleName(); all'interno della classe e quindi utilizzare la variabile TAG in ogni metodo.

  4. Se si desidera accedere al nome della classe da metodi statici, quindi utilizzare private static final String TAG = MainActivity.class.getSimpleName(); ora utilizzare la variabile statica TAG all'interno dei metodi statici.

Problemi correlati