2016-08-10 10 views
1

私はJavafxでコンソールを書いていますが、このコンソールではハイパーリンクを利用しています。ハイパーリンクは単にURLを起動するだけではありませんので、私はあなたがそれらを実行するために空を渡すことができるかどうか疑問に思っていました。パラメータとしてvoidを転送することはできますか?

これは、URLを起動するハイパーリンクの私の例である:

public void writeHyper(String name, String url) { 
    Hyperlink link = new Hyperlink(name); 
    link.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent e) { 
      try { 
       Desktop.getDesktop().browse(new URI(url)); 
      } catch (IOException | URISyntaxException e1) { 
       e1.printStackTrace(); 
      } 
     } 
    }); 
    t.getChildren().add(link); 
} 

は、これらの線に沿って何かをすることが可能です:

public void writeVoid(String name, Void v) { 
    Hyperlink link = new Hyperlink(name); 
    link.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent e) { 
      // runs the void 
     } 
    }); 
    t.getChildren().add(link); 
} 
+0

は、Java 8、[なぜラムダを使用していない?](http://docs.oracle.com/javase/tutorial/javaを使用している場合/javaOO/lambdaexpressions.html) – Jeeter

+1

<= Java 8を使用している場合は、 'Runnable'を実装するクラスを使用しないでください。 –

+0

[Voidとno parameterの違いは何ですか?]の複製がありますか?(http://stackoverflow.com/questions/14030337/whats-the-difference-between-void-and-no-parameter) –

答えて

3

あなたが実行するための機能が必要な場合は、使用することができますlambda(Java 8+のみ)または@JonnyHenlyのいずれかが指摘されている場合は、Runnableです。 あなたのコードは次のようになります。

public void writeVoid(String name, Runnable r) { 
Hyperlink link = new Hyperlink(name); 
link.setOnAction(new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(ActionEvent e) { 
     r.run(); // runs the void 
    } 
}); 
t.getChildren().add(link); 

... 
writeVoid(name, new Runnable() { 
    @Override 
    public void run() { 
     System.out.println("Running!"); 
    } 
} 
... 
+0

ああ、それも考えていませんでしたが、これで解決しました。ありがとう。 – user2079564

関連する問題