我所要做的就是获取当前的类名,而java在我的类名的末尾附加了一个无用的无意义的$1。我怎么能摆脱它,只返回实际的类名?
String className = this.getClass().getName();
我所要做的就是获取当前的类名,而java在我的类名的末尾附加了一个无用的无意义的$1。我怎么能摆脱它,只返回实际的类名?
String className = this.getClass().getName();
当前回答
这个回答有点晚了,但我认为在匿名处理程序类的上下文中还有另一种方法可以做到这一点。
比方说:
class A {
void foo() {
obj.addHandler(new Handler() {
void bar() {
String className=A.this.getClass().getName();
// ...
}
});
}
}
它会达到同样的结果。此外,它实际上非常方便,因为每个类都是在编译时定义的,因此不会破坏动态性。
在此之上,如果类确实是嵌套的,即A实际上是由B包围的,则B的类可以很容易地称为:
B.this.getClass().getName()
其他回答
在我的例子中,我使用这个Java类:
private String getCurrentProcessName() {
String processName = "";
int pid = android.os.Process.myPid();
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
if (processInfo.pid == pid) {
processName = processInfo.processName;
break;
}
}
return processName;
}
试试这个 this.getClass(). getcanonicalname()或this.getClass(). getsimplename()。如果是匿名类,则使用this.getClass().getSuperclass().getName()
在您的示例中,这可能引用一个匿名类实例。Java通过在外围类的名称后面附加一个$number来为这些类命名。
我假设这发生在一个匿名类中。当你创建一个匿名类时,你实际上创建了一个类,它扩展了你所获得的类名。
获得你想要的名字的“干净”方式是:
如果你的类是一个匿名的内部类,getSuperClass()应该给你一个创建它的类。如果你从一个接口创建它,那么你就是SOL因为你能做的最好的就是getInterfaces()它可能会给你多个接口。
“hack”的方法是使用getClassName()获取名称,并使用正则表达式删除$1。
这个回答有点晚了,但我认为在匿名处理程序类的上下文中还有另一种方法可以做到这一点。
比方说:
class A {
void foo() {
obj.addHandler(new Handler() {
void bar() {
String className=A.this.getClass().getName();
// ...
}
});
}
}
它会达到同样的结果。此外,它实际上非常方便,因为每个类都是在编译时定义的,因此不会破坏动态性。
在此之上,如果类确实是嵌套的,即A实际上是由B包围的,则B的类可以很容易地称为:
B.this.getClass().getName()