Это 9-й день моего участия в Gengwen Challenge.Подробности мероприятия смотрите:Обновить вызов
Эта статья участвует в "Java Theme Month - Java Development Practice", подробнее см.Ссылка на мероприятие
Статьи по Теме
Многопоточность Java:Многопоточность Java
предисловие
лямбда-выражения поддерживают только функциональные интерфейсы.
- Лямбда-выражение — это новая функция JDK8, которая может заменить большинство анонимных внутренних классов и написать более элегантный код Java, особенно при обходе коллекции и других операциях с коллекциями, что может значительно оптимизировать структуру кода.
- Почему вы хотите внезапно вставить изучение лямда-выражений, потому что это очень убедительно~ Код написан больше как большой парень.
1. Функциональный интерфейс
-
Что такое функциональный интерфейс?
- любой интерфейс,есть и толькоабстрактный метод, то это функциональный интерфейс.
-
Типовой функциональный интерфейс
public interface mainInterface {
void funMethod();
}
- Для функционального интерфейса мы можем использовать лямбда-выражение для создания объекта его реализации.
Во-вторых, пять методов реализации интерфейса
- ① Нормальная реализация класса
Случай кода:
/**
* 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);
}
};
- ⑤ реализация лямбда-выражения
//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);
}
}
- Результат выполнения следующий:
2. лямбда-выражения
- Метод реализации:
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);
}
Результат выполнения следующий:
3. Упрощение лямбда-выражений:
- Упрощенный способ:
//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));
Результат выполнения следующий:
- Суммировать
- Упростите тип параметра, вы не можете написать тип параметра, но вы не должны писать все параметры
- Упростите скобки параметра, если параметр только один, скобки параметра можно опустить.
- Упростите фигурные скобки тела метода, если на панели методов есть только один оператор, вы можете выиграть фигурные скобки тела метода.
- Если тело метода имеет только один оператор, и это оператор возврата, вы можете опустить фигурные скобки тела метода.
Впереди долгий путь, и я обязательно буду его искать вдоль и поперёк~
Если вы думаете, что я блогеры хорошо пишу! Писать нелегко, пожалуйста, ставьте лайки, подписывайтесь и комментируйте, чтобы поощрять блоггеров ~ хахах