理解Functional Interfere:函数式接口是学习Lamda表达式的关键。
注意:只有函数式接口才可以使用Lamda表达式
函数式接口定义:
public interface Runable(){
public abstract void run();
}
package testlamda;
public class Test1 {
public static void main(String[] args) {
PeopleCan iCan = new ICan();
iCan.doSomething();
}
}
//1.定义一个函数式接口
interface PeopleCan {
//Java 中接口的方法默认是 public abstract的
void doSomething();
}
//2.定义实现类
class ICan implements PeopleCan{
@Override
public void doSomething() {
System.out.println("我能吃饭");
}
}
正常是文件定义接口和实现类,这里只是演示,就在一个文件定义。
其他类中定义定义实现类,省去一个实现类文件ICan2
package testlamda;
public class Test2 {
//2.定义实现类:静态内部类
static class ICan2 implements PeopleCan2{
@Override
public void doSomething() {
System.out.println("我能吃饭2");
}
}
public static void main(String[] args) {
PeopleCan2 iCan = new ICan2();
iCan.doSomething();
}
}
//1.定义一个函数式接口
interface PeopleCan2 {
//Java 中接口的方法默认是 public abstract的
void doSomething();
}
用的时候再定义实现类ICan3
package testlamda;
public class Test3 {
public static void main(String[] args) {
//2.定义实现类:局部内部类
class ICan3 implements PeopleCan3{
@Override
public void doSomething() {
System.out.println("我能吃饭3");
}
}
PeopleCan3 iCan = new ICan3();
iCan.doSomething();
}
}
//1.定义一个函数式接口
interface PeopleCan3 {
//Java 中接口的方法默认是 public abstract的
void doSomething();
}
匿名内部类(没有类的名称,必须借助接口或者父类),这个实现类没有名字
package testlamda;
public class Test4 {
public static void main(String[] args) {
//2.定义实现类:匿名内部类(没有类的名称,必须借助接口或者父类)
PeopleCan4 iCan = new PeopleCan4(){
@Override
public void doSomething() {
System.out.println("我能吃饭4");
}
};
iCan.doSomething();
}
}
//1.定义一个函数式接口
interface PeopleCan4 {
//Java 中接口的方法默认是 public abstract的
void doSomething();
}
package testlamda;
public class Test5 {
public static void main(String[] args) {
//2.定义实现类:Lamda表达式,()里可以传参数
PeopleCan4 iCan = () -> {
System.out.println("我能吃饭5");
};
iCan.doSomething();
}
}
//1.定义一个函数式接口
interface PeopleCan5 {
//Java 中接口的方法默认是 public abstract的
void doSomething();
}
package testlamda;
public class Test5 {
public static void main(String[] args) {
//Lamda表达式,()里可以传参数
// PeopleCan5 iCan = (String sth) -> {
// System.out.println(sth);
// };
//简化1:省略参数类型,多个参数也可以去掉参数类型,但要去就都去掉
// PeopleCan5 iCan = (sth) -> {
// System.out.println(sth);
// };
//简化2:省略括号()
// PeopleCan5 iCan = sth2 -> {
// System.out.println(sth2);
// };
//简化3:省略括号{},这个省略是因为方法体只有System.out.println(sth3);一行,多行就不能省略
PeopleCan5 iCan = sth3 -> System.out.println(sth3);
iCan.doSomething("我能吃饭5");
}
}
//1.定义一个函数式接口
interface PeopleCan5 {
//Java 中接口的方法默认是 public abstract的
void doSomething(String sth);
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务