我知道如何将参数传递给方法 - 您将类/原语名称放在方法头中,并在调用所述方法时替换该类型的值。是否可以将一系列语句传递给方法(在java中),类似于传入变量的方式?例如,如:
repeat(5) {
System.out.println("Hello");
}
...
private void repeat(int arg, {} statements) {
for (int x = 0; x < arg; x++) {
statements;
}
}
这里所需的输出是打印出来&#34;你好&#34; 5次。
显然语法不正确,但这有可能吗?
答案 0 :(得分:4)
传递一个具有执行该系列语句的函数的对象。
答案 1 :(得分:2)
使用包含要运行的语句的方法传递对象。
一种简单的方法是使用匿名类实现Runnable接口。
private void repeat(int times, Runnable action) {
for (int x = 0; x < times; x++) {
action.run();
}
}
...
repeat(5, new Runnable(){
void run(){
System.out.println("Hello");
}
});
答案 2 :(得分:1)
您可以创建具有标准化方法的界面。比如说“Lambda”界面。那么该接口将有一个名为act()的方法。
public interface Lambda{
public void act();
}
现在,当你想要这样做时,你可以拥有一个名为repeat
的函数public static void repeat(int x, Lambda lambda){
for(int y = 0;y<x;y++){
lambda.act();
{
}
你可以这样称呼
public static void main(String args[]){
repeat(5, new Lambda(){
@Override
public void act(){
System.out.println("hello");
});
}
基本上你在这里做的事情被称为通过使用孩子来覆盖父母的方法。 new Lambda()
行创建了Lambda接口的新匿名子项 - See what anonymouse Classes are here。
答案 3 :(得分:1)
您有几种选择。使用Java 8,您只需传入一个界面:
公共课测试{
public interface MyStatements {
//one argument if needed
public void execute(int arg1);
}
public static void main(String args[]) {
// lambda
MyStatements statements = a -> System.out.println(a);
repeat(20, statements);
}
private static void repeat(int arg, MyStatements statements) {
for (int x = 0; x < arg; x++) {
statements.execute(x);
}
}
}
您也可以在Groovy中执行此操作
private static void repeat(int arg, Closure closure) {
for (int x = 0; x < arg; x++) {
closure(x)
}
}
repeat(20, {myInt -> println(myInt)})