簡體   English   中英

外語句法 - 需要幫助理解

[英]Foreign Syntax - Need Help Understanding

所以我現在已經編程了幾年,所以我不是很新 - 但我剛開始學習Java(來自C ++)。 在學習庫並查看它的示例(jMonkeyEngine3,如果你必須知道的話)我遇到了外來語法,我似乎無法找到任何文檔。

這是代碼(所有代碼都在類的范圍內):

/** Custom Keybinding: Map named actions to inputs. */
private void initKeys() {
  // You can map one or several inputs to one named action
  inputManager.addMapping("Pause",  new KeyTrigger(KeyInput.KEY_P));
  inputManager.addMapping("Left",   new KeyTrigger(KeyInput.KEY_J));
  inputManager.addMapping("Right",  new KeyTrigger(KeyInput.KEY_K));
  inputManager.addMapping("Rotate", new KeyTrigger(KeyInput.KEY_SPACE),
                                    new MouseButtonTrigger(MouseInput.BUTTON_LEFT));
  // Add the names to the action listener.
  inputManager.addListener(actionListener, new String[]{"Pause"});
  inputManager.addListener(analogListener, new String[]{"Left", "Right", "Rotate"});

}

private ActionListener actionListener = new ActionListener() {
  public void onAction(String name, boolean keyPressed, float tpf) {
    if (name.equals("Pause") && !keyPressed) {
      isRunning = !isRunning;
    }
  }
};

我猜測定義部分(15)使用類中的默認構造函數創建一個ActionListener對象,其中一個名為actionListener的私有作用域 - 然后覆蓋/實現onAction方法本身。 然后在它的實現(11)中,它只是引用這個創建的對象? 這是對的嗎?

非常感謝你的澄清。

我猜測定義部分(15)創建了一個ActionListener對象

這種語法就是所謂的匿名內部類 它與Java中的閉包或lambda表達式一樣接近,直到JDK 8出現。 你基本上是在動態創建一個新類。 它實際上和你說的一樣:

private ActionListener actionListener = new MyActionListener();

class MyActionListener implements ActionListener {
    public void onAction(String name, boolean keyPressed, float tpf) {
        if (name.equals("Pause") && !keyPressed) {
            isRunning = !isRunning;
        }
    }
}

另一種方式是使用更少的線條。

私人范圍

對象是私有的並不完全是這樣。 Private只是保存對象引用的字段的可見性。 對象本身可以隨處移動,就像任何對象一樣。

命名為actionListener

這是包含對創建的ActionListener的引用的字段的名稱。

使用類中的默認構造函數

實際上,ActionListener是一個接口,因此沒有構造函數。 甚至匿名內部類在技術上也沒有默認構造函數。 相反,它有一個“匿名構造函數”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM