我所要做的就是获取当前的类名,而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()
其他回答
你可以像这样使用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();
}
}
我发现这适用于我的代码,但是我的代码是在for循环中从数组中获取类。
String className="";
className = list[i].getClass().getCanonicalName();
System.out.print(className); //Use this to test it works
试试这个 this.getClass(). getcanonicalname()或this.getClass(). getsimplename()。如果是匿名类,则使用this.getClass().getSuperclass().getName()
Try,
String className = this.getClass().getSimpleName();
只要你不在静态方法中使用它,它就可以工作。
在您的示例中,这可能引用一个匿名类实例。Java通过在外围类的名称后面附加一个$number来为这些类命名。