可以将 void 作为参数传递吗?
Possible to transfer void as parameter?
我正在用 Javafx 编写一个控制台,在这个控制台中我正在使用超链接。由于超链接不仅可以启动 URL,我想知道您是否可以将它们的空隙传递给 运行。
这是我的超链接启动示例 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);
}
如果您需要 运行 的函数,您可以使用 lambda (Java 8+ only) or as @JonnyHenly pointed out, a 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!");
}
}
...
我正在用 Javafx 编写一个控制台,在这个控制台中我正在使用超链接。由于超链接不仅可以启动 URL,我想知道您是否可以将它们的空隙传递给 运行。
这是我的超链接启动示例 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);
}
如果您需要 运行 的函数,您可以使用 lambda (Java 8+ only) or as @JonnyHenly pointed out, a 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!");
}
}
...