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

78

我知道使用ContextgetClass().getName()方法可以得到一个字符串,表示完整的类名,例如com.package1.package2.MainActivity

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

我可以使用简单的split()方法来实现,但也许有更好、更可靠的方法。

10个回答

179

这就是你所需要的。

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

1
这是正确的事情。getLocalClassName()将返回应用程序根目录中的任何包名称。这仅返回类名,无论它是在根目录还是在其他某个包中。 - sandalone

22

要仅获取类名称而非完整路径,您将使用此表达式:

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

4
每天都是学校的日子,不错的发现 :-) - Rawkode
1
是的,我很抱歉在发布问题后这么快就要修改它,但这比删除问题要好。 - sandalone
如果你使用旧的API,不要同时依赖于这三个条件,否则会返回null或无用的文本。对我来说,只有getClass().getName()有效。 - djdance

8

或者,您也可以使用:

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

3
  1. 如果你需要在方法中获取类名,使用getLocalClassName()

  2. 如果你需要在方法外获取类名,使用getClass().getSimpleName()

  3. 如果你想在同一个类的多个方法中重复使用类名,则在类内部使用private final String TAG = getClass().getSimpleName();,然后在每个方法中使用TAG变量。

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


1
Kotlin方式:MainActivity::class.java.simpleName

1
在 Kotlin 中,您应该使用:


val className = javaClass.simpleName

1
无论你如何操作,你都需要在getClass之上执行额外的操作。我建议使用这种方法而不是split:
String className = xxx.getClass();
int pos = className.lastIndexOf ('.') + 1; 
String onlyClass = className.substring(pos);

阅读他的帖子最后一行,他想要除了split(substring)之外的其他东西。 - Shankar Agarwal
1
没问题,我没有使用 split。 - Rawkode
@Rawkode,有更好的方法。这种方法比使用“split”或“substring”更安全。 - sandalone

1
使用getSimpleName方法:
String name = getClass().getSimpleName();

0
如果你想在类外部获取名称,可以调用以下代码:
MainActivity.class.getSimpleName()

通过这种方式,您可以避免使您的类变为静态。


0

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

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

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

(在监听器中我得到的是这样的东西:com.djdance.android.main$53)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接