我所要做的就是获取当前的类名,而java在我的类名的末尾附加了一个无用的无意义的$1。我怎么能摆脱它,只返回实际的类名?
String className = this.getClass().getName();
我所要做的就是获取当前的类名,而java在我的类名的末尾附加了一个无用的无意义的$1。我怎么能摆脱它,只返回实际的类名?
String className = this.getClass().getName();
当前回答
我假设这发生在一个匿名类中。当你创建一个匿名类时,你实际上创建了一个类,它扩展了你所获得的类名。
获得你想要的名字的“干净”方式是:
如果你的类是一个匿名的内部类,getSuperClass()应该给你一个创建它的类。如果你从一个接口创建它,那么你就是SOL因为你能做的最好的就是getInterfaces()它可能会给你多个接口。
“hack”的方法是使用getClassName()获取名称,并使用正则表达式删除$1。
其他回答
我假设这发生在一个匿名类中。当你创建一个匿名类时,你实际上创建了一个类,它扩展了你所获得的类名。
获得你想要的名字的“干净”方式是:
如果你的类是一个匿名的内部类,getSuperClass()应该给你一个创建它的类。如果你从一个接口创建它,那么你就是SOL因为你能做的最好的就是getInterfaces()它可能会给你多个接口。
“hack”的方法是使用getClassName()获取名称,并使用正则表达式删除$1。
我发现这适用于我的代码,但是我的代码是在for循环中从数组中获取类。
String className="";
className = list[i].getClass().getCanonicalName();
System.out.print(className); //Use this to test it works
两个答案的组合。还输出一个方法名:
Class thisClass = new Object(){}.getClass();
String className = thisClass.getEnclosingClass().getSimpleName();
String methodName = thisClass.getEnclosingMethod().getName();
Log.d("app", className + ":" + methodName);
你可以像这样使用this.getClass().getSimpleName():
import java.lang.reflect.Field;
public class Test {
int x;
int y;
public String getClassName() {
String className = this.getClass().getSimpleName();
System.out.println("Name:" + className);
return className;
}
public Field[] getAttributes() {
Field[] attributes = this.getClass().getDeclaredFields();
for(int i = 0; i < attributes.length; i++) {
System.out.println("Declared Fields" + attributes[i]);
}
return attributes;
}
public static void main(String args[]) {
Test t = new Test();
t.getClassName();
t.getAttributes();
}
}
试试这个 this.getClass(). getcanonicalname()或this.getClass(). getsimplename()。如果是匿名类,则使用this.getClass().getSuperclass().getName()