如何仅获取类名而不是完整路径?


71

我知道使用Context和方法getClass().getName()可以获取代表完整类名的字符串,例如com.package1.package2.MainActivity

我如何只获得最后一部分,仅获得类名称?在这种情况下,它将是MainActivity字符串。

我可以用一种简单的split()方法来做到这一点,但也许有更好的方法,更可靠。

Answers:


163

这就是您所需要的。

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

1
这是对的。在getLocalClassName()将应用程序的根目录中返回任何包名。无论它是在根目录还是在其他软件包中,它仅返回类的名称。
sandalone,2012年

20

要仅获取类的名称而不是完整路径,可以使用以下表达式:

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

4
每天都是上学日,很高兴找到:-)
Rawkode 2012年

1
是的,我讨厌发布问题后这么快,但与以删除问题为宜,我最好以这种方式发布。
sandalone

如果您使用旧的API,请不要同时使用这3种方法,否则将返回null或无用的文本。。对我来说,唯一的的getClass()的getName()的作品
djdance

7

或者,您可以使用:

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

1

无论采用哪种方式,都需要在getClass之上执行额外的操作。我建议在拆分时使用:

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

阅读了他的帖子的最后一行,他希望其他然后分开(子字符串)
Shankar Agarwal

1
很好,我没有使用split。
Rawkode 2012年

@Rawkode有更好的方法。这比使用split或更安全substring
sandalone,2012年

1
  1. 如果在方法中需要类名,请使用 getLocalClassName()

  2. 如果您需要方法外的类名,请使用 getClass().getSimpleName()

  3. 如果要在同一类的多个方法中重用该类名,请在该类中使用private final String TAG = getClass().getSimpleName();,然后在每个方法中使用TAG变量。

  4. 如果要从静态方法访问类名,请在静态方法中private static final String TAG = MainActivity.class.getSimpleName();使用静态变量TAG。


0

没有其他解决方案对我有用,不知道为什么。我正在使用

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

缺点:在一个字符串中,您可以在线程和侦听器中使用它。

(在listeres中,我得到类似com.djdance.android.main $ 53的东西)


0

如果您想在课程之外获得名称,可以致电:

MainActivity.class.getSimpleName()

这样,您可以避免使您的类静态化。


0

使用getSimpleName方法:

String name = getClass().getSimpleName();


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.