public class LambdaTest
{
public static void main(String[] args)
{
IntConsumerTest.repeat(10, (i)->System.out.println("cutdown:"+(9-i)));
}
}
import java.util.function.*;
public class IntConsumerTest
{
public static void repeat(int n,IntConsumer action)
{
for(int i=0;i<n;i++)
action.accept(i);
}
}
问题:IntConsumer是一个函数式接口,action是一个接口变量,如下的语句:action.accept(i);却能正确执行,给人的感觉是一个对象调用了方法,这是什么用法?
(i)->System.out.println("cutdown:"+(9-i))可以看成是一个匿名类实现了IntConsumer 接口的accept()方法,action.accept(i)的调用实际上就是实现类的调用了
可以写成这种
public class LambdaTest {
public static void main(String[] args)
{
IntConsumerTest.repeat(10, new MyIntConsumer());
}
}
class MyIntConsumer implements IntConsumer{
@Override
public void accept(int value) {
System.out.println("cutdown:"+(9-value));
}
}