以匿名方式调用方法(内部)类
Invoking a method in anonymous (inner) classes
interface Example{
void methodExample();
}
class Y{
void do(Example x) { }
}
class X{
void methodX() {
Y y = new Y();
y.do(new Example() {
public void methodExample() {
System.out.println("methodExample");
}
});
}
}
我想创建一个主 class 并调用 methodExample
。我该怎么做?
因为你的 class 实现了 Example
接口,并且因为 void methodExample()
出现在那个接口上,你需要做的就是通过它的接口引用对象,并调用它的方法:
class Y{
public void doIt(Example x) {
x.methodExample();
}
}
以上是有效的,因为所有 classes 实现 Example
的对象,包括所有匿名实现,在编译时已知实现 methodExample()
.
如果您无权访问 class Y
那么,唯一的方法是先覆盖 doIt()
本身,使用匿名内部 class 和然后,调用覆盖的方法,例如:
class X {
void methodX() {
Y y = new Y() {
@Override
void doIt(Example x) {
x.methodExample();
}
};
y.doIt(new Example() {
public void methodExample() {
System.out.println("methodExample");
}
});
}
}
要调用它,您只需执行以下操作:
public static void main(String[] args) throws Exception {
X x = new X();
x.methodX();
}
interface Example{
void methodExample();
}
class Y{
void do(Example x) { }
}
class X{
void methodX() {
Y y = new Y();
y.do(new Example() {
public void methodExample() {
System.out.println("methodExample");
}
});
}
}
我想创建一个主 class 并调用 methodExample
。我该怎么做?
因为你的 class 实现了 Example
接口,并且因为 void methodExample()
出现在那个接口上,你需要做的就是通过它的接口引用对象,并调用它的方法:
class Y{
public void doIt(Example x) {
x.methodExample();
}
}
以上是有效的,因为所有 classes 实现 Example
的对象,包括所有匿名实现,在编译时已知实现 methodExample()
.
如果您无权访问 class Y
那么,唯一的方法是先覆盖 doIt()
本身,使用匿名内部 class 和然后,调用覆盖的方法,例如:
class X {
void methodX() {
Y y = new Y() {
@Override
void doIt(Example x) {
x.methodExample();
}
};
y.doIt(new Example() {
public void methodExample() {
System.out.println("methodExample");
}
});
}
}
要调用它,您只需执行以下操作:
public static void main(String[] args) throws Exception {
X x = new X();
x.methodX();
}