interface A {
void show();
}
public class Static {
public static void main(String args[]) {
A a = new A(){
public void show(){
System.out.println("In anonymous Class");
A b =new A(){
public void show(){
System.out.println("In nested Anonymous Class");
}
};
}
};
//a.show();
}
}
如果我想要打印"在嵌套的匿名类"中,我应该使用什么而不是a.show()?
//稍后编辑
谢谢大家但不幸的是错误输入了代码....我并不是指方法中的匿名类......而是在类本身内部。抱歉这个错误。这是更正后的代码
interface A {
void show();
}
public class Static {
public static void main(String args[]) {
A a = new A() {
public void show() {
System.out.println("In anonymous Class");
};
A b = new A() {
public void show() {
System.out.println("In nested Anonymous Class");
}
};
};
a.show();
}
}
答案 0 :(得分:1)
通常情况下,这是不可能的,因为A是一个界面,界面没有字段。但是,可以使用反射访问此字段。虽然这有点黑客,我不建议在现实世界中使用它!#/ p>
interface A {
void show();
}
public class Static {
public static void main(String args[]) throws IllegalArgumentException, IllegalAccessException, SecurityException, NoSuchFieldException {
A a = new A() {
public void show() {
System.out.println("In anonymous Class");
};
public A b = new A() {
public void show() {
System.out.println("In nested Anonymous Class");
}
};
};
// Get the anonymous Class object
Class<? extends A> anonymousClass = a.getClass();
// Get field "b"
Field fieldB = anonymousClass.getField("b");
// Get the value of b in instance a and cast it to A
A b = (A) fieldB.get(a);
// Show!
b.show();
}
}
注意:更好的方法可能是在接口上为变量b简单声明一个getter。
答案 1 :(得分:0)
在课堂声明后立即拨打b.show();
。
A b =new A(){
public void show(){
System.out.println("In nested Anonymous Class");
}
};
b.show();
答案 2 :(得分:0)
您不应该使用代替 a.show()
。该行应该是您放置它的位置,并且取消注释。此外,您需要b.show()
内部:
public static void main(String args[]) {
A a = new A(){
public void show(){
System.out.println("In anonymous Class");
A b =new A(){
public void show(){
System.out.println("In nested Anonymous Class");
}
};
b.show();
}
};
a.show();
}