Java Can';t调用匿名类方法
我可以想象一些非常有创意的Java代码:Java Can';t调用匿名类方法,java,class,closures,Java,Class,Closures,我可以想象一些非常有创意的Java代码: Object thing = new Object() { public void speak() { System.out.println("Hi!"); } }; thing.speak(); 甚至,为了获得完全的闭包效果,定义一个函数接口。。。你明白了吗 为什么这个代码不起作用?我相信您可以这样做:- new Object() { public void speak() { Sys
Object thing = new Object() {
public void speak() {
System.out.println("Hi!");
}
};
thing.speak();
甚至,为了获得完全的闭包效果,定义一个函数接口。。。你明白了吗
为什么这个代码不起作用?我相信您可以这样做:-
new Object() {
public void speak() {
System.out.println("Hi!");
}
}.speak();
我可以帮你。我相信你可以这样做:-
new Object() {
public void speak() {
System.out.println("Hi!");
}
}.speak();
我可以帮你。我相信你可以这样做:-
new Object() {
public void speak() {
System.out.println("Hi!");
}
}.speak();
我可以帮你。我相信你可以这样做:-
new Object() {
public void speak() {
System.out.println("Hi!");
}
}.speak();
可能会对您有所帮助。不确定此示例中的有用性,但原始声明上的某种类型的重写方法是有用的,因为它是重写的,所以您可以调用这些方法。否则,在您的情况下,只需将反射用作:
thing.getClass().getMethod("speak").invoke(thing);
对于覆盖方法:
Object thing = new Object() {
public void toString() {
System.out.println("Hi! Me inside your mind!");
return "not today!";
}
};
thing.toString();
不确定在本例中是否有用,但原始声明上的某种类型的重写方法是有用的,因为它是重写的,所以可以调用这些方法。否则,在您的情况下,只需将反射用作:
thing.getClass().getMethod("speak").invoke(thing);
对于覆盖方法:
Object thing = new Object() {
public void toString() {
System.out.println("Hi! Me inside your mind!");
return "not today!";
}
};
thing.toString();
不确定在本例中是否有用,但原始声明上的某种类型的重写方法是有用的,因为它是重写的,所以可以调用这些方法。否则,在您的情况下,只需将反射用作:
thing.getClass().getMethod("speak").invoke(thing);
对于覆盖方法:
Object thing = new Object() {
public void toString() {
System.out.println("Hi! Me inside your mind!");
return "not today!";
}
};
thing.toString();
不确定在本例中是否有用,但原始声明上的某种类型的重写方法是有用的,因为它是重写的,所以可以调用这些方法。否则,在您的情况下,只需将反射用作:
thing.getClass().getMethod("speak").invoke(thing);
对于覆盖方法:
Object thing = new Object() {
public void toString() {
System.out.println("Hi! Me inside your mind!");
return "not today!";
}
};
thing.toString();
因为在类型对象上未声明speak()
。索蒂里奥斯说:“如果你真的想要反射,你可以使用反射。”。在构造它之后,“thing”仍然声明为仅仅是对象,因此您必须遵守该接口。因为speak()
不是在类型对象上声明的。索蒂里奥斯说:“如果你真的想要反射,你可以使用反射。”。在构造它之后,“thing”仍然声明为仅仅是对象,因此您必须遵守该接口。因为speak()
不是在类型对象上声明的。索蒂里奥斯说:“如果你真的想要反射,你可以使用反射。”。在构造它之后,“thing”仍然声明为仅仅是对象,因此您必须遵守该接口。因为speak()
不是在类型对象上声明的。索蒂里奥斯说:“如果你真的想要反射,你可以使用反射。”。构造之后,“thing”仍然声明为Object,因此必须遵循该接口。为什么你认为这与OP有什么不同?它会像他那样打印“Hi!”为什么你认为这与OP有什么不同?我直接使用对象而不使用变量thing它编译并运行,这与OP的内容不同。但是,如果不首先声明包含speak方法的接口,您仍然无法将其存储在变量或字段中。为什么您认为这与OP有什么不同?它会像OP一样打印“Hi!”为什么您认为这与OP有什么不同?我直接使用对象而不使用变量thingIt编译并运行,这与OP的内容不同。但是,如果不首先声明包含speak方法的接口,您仍然无法将其存储在变量或字段中。为什么您认为这与OP有什么不同?它会像OP一样打印“Hi!”为什么您认为这与OP有什么不同?我直接使用对象而不使用变量thingIt编译并运行,这与OP的内容不同。但是,如果不首先声明包含speak方法的接口,您仍然无法将其存储在变量或字段中。为什么您认为这与OP有什么不同?它会像OP一样打印“Hi!”为什么您认为这与OP有什么不同?我直接使用对象而不使用变量thingIt编译并运行,这与OP的内容不同。但是,如果不至少首先声明包含speak方法的接口,就不能将其存储在变量或字段中。