//无返回值一个参数
@FunctionalInterface
interface OneParameterNoReturn {
void test(int a);
}
public static void main(String[] args) {
//不使用lambda表达式
OneParameterNoReturn oneParameterNoReturn1 = new OneParameterNoReturn() {
@Override
public void test(int a) {
System.out.println("重写了带有一个参数的test方法,参数为:" + a);
}
};
oneParameterNoReturn1.test(10);
System.out.println("===================");
//使用lambda表达式
OneParameterNoReturn oneParameterNoReturn2 = (int a) -> { System.out.println("重写了带有一个参数的test方法,参数为:" + a);};
oneParameterNoReturn2.test(20);
}
代码执行结果如下:
3、无返回值多个参数(MoreParameterNoReturn)
代码如下:
java复制代码
//无返回值多个参数
@FunctionalInterface
interface MoreParameterNoReturn {
void test(int a,int b);
}
public static void main(String[] args) {
//不使用lambda表达式
MoreParameterNoReturn moreParameterNoReturn1 = new MoreParameterNoReturn() {
@Override
public void test(int a, int b) {
System.out.println("重写了带有2个参数的test方法,参数:" + a + " " + b);
}
};
moreParameterNoReturn1.test(10,20);
//使用lambda表达式
MoreParameterNoReturn moreParameterNoReturn2 = (int a, int b) -> {System.out.println("重写了带有2个参数的test方法,参数:" + a + " " + b);};
moreParameterNoReturn2.test(30,40);
}
代码执行结果如下:
4、有返回值无参数(NoParameterReturn)
代码如下:
java复制代码
//有返回值无参数
@FunctionalInterface
interface NoParameterReturn {
int test();
}
public static void main(String[] args) {
//不使用lambda表达式
NoParameterReturn noParameterReturn1 = new NoParameterReturn() {
@Override
public int test() {
System.out.println("重写了不带参数的test方法,有返回值");
return 10;
}
};
System.out.println(noParameterReturn1.test());
System.out.println("======================");
//使用lambda表达式
NoParameterReturn noParameterReturn = () -> {System.out.println("重写了不带参数的test方法,有返回值");return 20;};
System.out.println(noParameterReturn.test());
}
代码结果如下:
5、有返回值一个参数(OneParameterReturn)
代码如下:
java复制代码
//有返回值一个参数
@FunctionalInterface
interface OneParameterReturn {
int test(int a);
}
public static void main(String[] args) {
//不使用lambda表达式
OneParameterReturn oneParameterReturn1 = new OneParameterReturn() {
@Override
public int test(int a) {
System.out.println("重写了带有一个参数的test方法,参数:" + a);
return a;
}
};
System.out.println(oneParameterReturn1.test(10));
//使用lambda表达式
OneParameterReturn oneParameterReturn2 = (int a) -> {System.out.println("重写了带有一个参数的test方法,参数:" + a);return a;};
System.out.println(oneParameterReturn2.test(20));
}
代码结果如下:
6、有返回值多参数(MoreParameterReturn )
代码如下:
java复制代码
//有返回值多参数
@FunctionalInterface
interface MoreParameterReturn {
int test(int a,int b);
}
public static void main(String[] args) {
MoreParameterReturn moreParameterReturn1 = new MoreParameterReturn() {
@Override
public int test(int a, int b) {
System.out.println("重写了带有一个参数的test方法,参数:" + a + " " + b);
return a + b;
}
};
System.out.println(moreParameterReturn1.test(10, 10));
MoreParameterReturn moreParameterReturn2 = (int a, int b) -> {System.out.println("重写了带有一个参数的test方法,参数:" + a + " " + b);return a + b;};
System.out.println(moreParameterReturn2.test(20, 20));
}
代码结果如下:
三、变量捕获
(1)、匿名内部类的简单使用
java复制代码
class TestDemo {
public void func(){
System.out.println("func()");
}
}
public class Test2 {
public static void main(String[] args) {
//匿名内部类的简单使用
TestDemo testDemo = new TestDemo() {
public void func() {
System.out.println("我是内部类,且重写了func这个方法!");
}
};
testDemo.func();
}
}
代码结果如下:
(2)、匿名内部类变量的捕获
java复制代码
class TestDemo {
public void func(){
System.out.println("func()");
}
}
public static void main(String[] args) {
int a = 100;
//匿名内部类变量的捕获
TestDemo testDemo = new TestDemo() {
public void func() {
//a = 99;err
System.out.println("我是内部类,且重写了func这个方法!");
System.out.println("捕获了a:" + a);
}
};
testDemo.func();
}
代码结果如下:
(3)、Lambda变量的捕获
java复制代码
@FunctionalInterface
interface NoParameterNoReturn1 {
void test();
}
public static void main(String[] args) {
int a = 100;
NoParameterNoReturn noParameterNoReturn = () -> {
//a = 99;err
System.out.println("捕获变量:"+a);};
noParameterNoReturn.test();
}