在用 Java 制作一个小游戏时,我偶然发现了 keyListener 类,它在实例化时需要三个方法(keyTyped、keyPressed 和 keyReleased),如下所示:
JFrame.addKeyListener(new KeyListener(){
public void keyTyped(KeyEvent evnt) {
//blah
}
public void keyPressed(KeyEvent evnt) {
//blah
}
public void keyReleased(KeyEvent evnt) {
//blah
}
});
如何获得我正在制作的类,接受方法作为上面的参数?
最佳答案
new KeyListener() { ... }
实际上创建了一个实现 KeyListener
的匿名内部类。因此,它可以访问创建它的类的任何可见字段以及调用构造函数的方法内的任何局部最终变量。
示例:
class Outer {
int x;
void initUI( final int z) {
final int y = 0;
int nope = 1; //you can't access this since it is neither final nor a field like x
JFrame.addKeyListener( new KeyListener() {
public void keyTyped(KeyEvent evnt) {
System.out.println( x + y + z ); //you can access all of them
}
});
}
}
如果您想为关键监听器提供构造函数,您需要显式定义一个类,如 anonymous classes can't have custom constructors 。这意味着你必须做这样的事情(注意:伪代码):
class Outer {
void initUI() {
JFrame.addKeyListener( new InnerKeyListener( myParam ) );
}
class InnerKeyListener implements KeyListener {
InnerKeyListener( Param p ) {
}
...
}
}
当然,你也可以将内部类放入一个单独的文件中,或者将其设为静态内部类。
关于java - 如何使方法成为构造函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38227085/