Java中嵌套方法的合法性

时间:2015-03-18 20:36:35

标签: java

我正在寻找一种在处理数据的同时运行键监听器的方法,这取决于按住按钮。我想知道的是是否可以在其他方法中嵌套方法?

这就是我可以有一个while循环重复,同时仍然允许键监听器通过将键监听器方法放在循环内来工作。

像这样:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class myClass implements KeyListener {
    public void myMethod() {
        public void keyPressed(KeyEvent e) {}

        public void keyReleased(KeyEvent e) {}

        public void keyTyped(KeyEvent e) {}
    }
}

这可能吗?

如果是,嵌入myMethod()内部的关键监听器是否仍然可以正常工作?

2 个答案:

答案 0 :(得分:0)

public class myClass implements KeyListener {
    public void myMethod() {
        public void keyPressed(KeyEvent e) {} // Not possible in java + no termination with `;`

        public void keyReleased(KeyEvent e) {} // Not possible in java + no termination with `;`

        public void keyTyped(KeyEvent e) {} // Not possible in java + no termination with `;`
    }
}

您可能想要查看Java 8中lambdas的用法,只有在您被允许使用Java8时才能使用它。 Lambda不能解决您的问题,但可能会帮助您了解您是否希望处理程序函数是匿名的,但结构稍微好一些。

答案 1 :(得分:0)

工作实施来自:edu4java
这些方法中的每一个都单独声明它们是类的一部分,它们在另一个方法中被调用未在方法中声明

 public static void main(String[] args) {
        JFrame frame = new JFrame("Mini Tennis");
        KeyboardExample keyboardExample = new KeyboardExample();
        frame.add(keyboardExample);
        frame.setSize(200, 200);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }


public class MyKeyListener implements KeyListener {
    @Override

    public void keyTyped(KeyEvent e) {
    }

    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println("keyPressed="+KeyEvent.getKeyText(e.getKeyCode()));
    }

    @Override
    public void keyReleased(KeyEvent e) {
        System.out.println("keyReleased="+KeyEvent.getKeyText(e.getKeyCode()));
    }
}

您的实施
不起作用,因为你试图在另一个方法中声明一个方法;你不能在myMethod()内声明一个方法。 必须必须在其外部声明。

public class myClass implements KeyListener {

//Your problem is right here
public void myMethod() {
    public void keyPressed(KeyEvent e) {}

    public void keyReleased(KeyEvent e) {}

    public void keyTyped(KeyEvent e) {}
}

}

将您的实施更改为以下

public class myClass implements KeyListener {

    public void myMethod() {
      //You can call the methods below inside this method.
    }

    public void keyPressed(KeyEvent e) {}

    public void keyReleased(KeyEvent e) {}

    public void keyTyped(KeyEvent e) {}
}