发布于2021-06-12 13:30 阅读(60) 评论(0) 点赞(3) 收藏(0)
lamda表达式只支持函数式接口。
什么是函数式接口?
任何一个接口,有且只有 一个抽象方法,那么它就是函数式接口。
典型的函数式接口
public interface mainInterface {
void funMethod();
}
对于函数式接口,我们可以用lamda表达式来创建他的实现对象。
①正常类实现
代码案例:
/**
* 1.正常接口实现类
*/
class FunInterImpl implements FunInter{
//重写该方法
@Override
public void method(String name) {
System.out.println("我是实现类中的重写方法:"+name);
}
}
②静态内部类实现
//2、静态内部类实现
static class FunInterImpl implements FunInter{
@Override
public void method(String name) {
System.out.println("我是实现类中的重写方法:"+name);
}
}
③局部内部类实现
//3.局部内部类
class FunInterImpl2 implements FunInter{
@Override
public void method(String name) {
System.out.println("我是实现类中的重写方法:"+name);
}
}
④匿名内部类实现
//4.匿名内部类,要一分号;结尾
FunInter funInter2 = new FunInter() {
@Override
public void method(String name) {
System.out.println("我是实现类中的重写方法:"+name);
}
};
⑤lamda表达式实现
//5.lamda表达式实现
FunInter funInter3 = (String name) ->{
System.out.println("我是实现类中的重写方法:"+name);
};
整体代码:
public class NoReturnMultiParam {
public static void main(String[] args) {
//1.正常实现接口的方式
FunInterImpl funInter = new FunInterImpl();
funInter.method("1、实现类");
System.out.println("***************************************");
//2、静态内部类实现
FunInterImpl funInter1 = new FunInterImpl();
funInter.method("2、静态内部类");
System.out.println("***************************************");
//3.局部内部类
class FunInterImpl2 implements FunInter{
@Override
public void method(String name) {
System.out.println("我是实现类中的重写方法:"+name);
}
}
FunInterImpl2 funInterImpl2 = new FunInterImpl2();
funInterImpl2.method("3、局部内部类");
System.out.println("***************************************");
//4.匿名内部类,要一分号;结尾
FunInter funInter2 = new FunInter() {
@Override
public void method(String name) {
System.out.println("我是实现类中的重写方法:"+name);
}
};
funInter2.method("4、匿名内部类");
System.out.println("***************************************");
//5.lamda表达式实现
FunInter funInter3 = (String name) ->{
System.out.println("我是实现类中的重写方法:"+name);
};
funInter3.method("5.lamda表达式实现");
}
//2、静态内部类实现
static class FunInterImpl implements FunInter{
@Override
public void method(String name) {
System.out.println("我是实现类中的重写方法:"+name);
}
}
}
/**
* 这个注解是用来标注函数式接口的
* 1.必须注解在接口上
* 2.被注解的接口有且只有一个抽象方法
* 3.被注解的接口可以有默认方法/静态方法,或者重写Object的方法
*/
@FunctionalInterface
interface FunInter{
void method(String name);
}
/**
* 1.正常接口实现类
*/
class FunInterImpl implements FunInter{
//重写该方法
@Override
public void method(String name) {
System.out.println("我是实现类中的重写方法:"+name);
}
}
执行结果如下:
实现方式:
public class lamdaTest01 {
public static void main(String[] args) {
/**
* 多参数无返回
*/
NoReturnMultiParam1 n1 = (int a,int b) ->{
System.out.println("多参数无返回:"+a+b);
};
n1.method(1,2);
/**
* 无参无返回值
*/
NoReturnNoParam n2 = ()->{
System.out.println("无参无返回值");
} ;
n2.method();
/**
* 一个参数无返回
*/
NoReturnOneParam n3 = (int a) -> {
System.out.println("一个参数无返回" + a);
};
n3.method(11);
/**
* 多个参数有返回值
*/
ReturnMultiParam n4 = (int a,int b)->{
System.out.println("多个参数有返回值" + a);
return 1;
};
System.out.print("****"+n4.method(1, 3));
/**
* 无参有返回
*/
ReturnNoParam n5 = ()->{
System.out.println("无参有返回");
return 1;
};
System.out.print("***"+n5.method());
/**
* 一个参数有返回值
*/
ReturnOneParam n6 = (int a) ->{
System.out.println("一个参数有返回值"+a);
return a;
};
System.out.print("***"+n6.method(1));
}
}
/**多参数无返回*/
@FunctionalInterface
interface NoReturnMultiParam1 {
void method(int a, int b);
}
/**无参无返回值*/
@FunctionalInterface
interface NoReturnNoParam {
void method();
}
/**一个参数无返回*/
@FunctionalInterface
interface NoReturnOneParam {
void method(int a);
}
/**多个参数有返回值*/
@FunctionalInterface
interface ReturnMultiParam {
int method(int a, int b);
}
/*** 无参有返回*/
@FunctionalInterface
interface ReturnNoParam {
int method();
}
/**一个参数有返回值*/
@FunctionalInterface
interface ReturnOneParam {
int method(int a);
}
执行结果如下:
简化的方式:
//1.简化参数类型,可以不写参数类型,但是必须所有参数都不写
NoReturnMultiParam1 lamdba1 = (a, b) -> {
System.out.println("简化参数类型");
};
lamdba1.method(1, 2);
//2.简化参数小括号,如果只有一个参数则可以省略参数小括号
NoReturnOneParam lambda2 = a -> {
System.out.println("简化参数小括号");
};
lambda2.method(1);
//3.简化方法体大括号,如果方法条只有一条语句,则可以胜率方法体大括号
NoReturnNoParam lambda3 = () -> System.out.println("简化方法体大括号");
lambda3.method();
//4.如果方法体只有一条语句,并且是 return 语句,则可以省略方法体大括号
ReturnOneParam lambda4 = a -> a+3;
System.out.println(lambda4.method(5));
ReturnMultiParam lambda5 = (a, b) -> a+b;
System.out.println(lambda5.method(1, 1));
执行结果如下:
写作不易,请点赞、关注、评论给博主一个鼓励吧~
2021最新完整面试题及答案(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、JVM、源码、算法,详细的学习规划图等资料,需要获取这些内容的朋友请加Q君样:222578377
原文链接:https://blog.csdn.net/xiaoliangtx/article/details/117741055
作者:忽明忽灭
链接:http://www.javaheidong.com/blog/article/222102/5ffff4c30bb01c752aee/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!