Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.
Часто используется при разработкеif...else...
Выполнять такие операции, как вынесение суждений об исключениях, обработка ветвей и т. д. Этиif...else...
Заполнение кода серьезно влияет на красоту кода кода.В это время мы можем использоватьJava 8
изFunction
интерфейс для уничтоженияif...else...
.
if (...){
throw new RuntimeException("出现异常了");
}
if (...){
doSomething();
} else {
doOther();
}
Function
функциональный интерфейс
использовать аннотации@FunctionalInterface
ID и содержит только один抽象方法
Интерфейс函数式接口
.函数式接口
в основном разделеныSupplier
функция снабжения,Consumer
функция потребления,Runnable
функция без аргументов, без возврата иFunction
Функция, которая имеет параметры и возвращает.
Function
можно рассматривать как функцию преобразования
Supplier
функция снабжения
Supplier
Форма выражения такова, что оно не принимает параметры и только возвращает данные
Consumer
потребляющая функция
Consumer
потребляющие функции иSupplier
Как раз наоборот.Consumer
Принимает один параметр, без возвращаемого значения
Runnable
функция без аргументов, без возврата
Runnable
Форма выражения заключается в том, что нет ни параметра, ни возвращаемого значения.
Function
Функция принимает форму параметра и возвращает значение.Supplier
,Consumer
иRunnable
можно рассматривать какFunction
особая форма
Используйте маленькие хитрости
Обработка, если выдает исключение
- определить функцию
Определите форму, которая выдает исключение函数式接口
, этот интерфейс имеет только параметры и не возвращает значения.消费型接口
/**
* 抛异常接口
**/
@FunctionalInterface
public interface ThrowExceptionFunction {
/**
* 抛出异常信息
*
* @param message 异常信息
* @return void
**/
void throwMessage(String message);
}
- написать метод оценки
Создать класс инструментовVUtils
и создатьisTure
метод, возвращаемое значение метода только что определено函数式接口
-ThrowExceptionFunction
.ThrowExceptionFunction
Логика реализации интерфейса такова, когда параметрb
заtrue
выдает исключение
/**
* 如果参数为true抛出异常
*
* @param b
* @return com.example.demo.func.ThrowExceptionFunction
**/
public static ThrowExceptionFunction isTure(boolean b){
return (errorMessage) -> {
if (b){
throw new RuntimeException(errorMessage);
}
};
}
- Как пользоваться
После вызова параметра параметра класса инструмента вызовите函数式接口
изthrowMessage
Метод передает информацию об исключении.
Когда входные и выходные параметрыfalse
нормальное исполнение
Когда входные и выходные параметрыtrue
выдает исключение
Обработка операций ветвления
- Определить функциональный интерфейс
СоздатьBranchHandle
Функциональный интерфейс интерфейса принимает два параметраRunnable
интерфейс. эти двое двоеRunnable
Интерфейс представляет собойtrue
илиfalse
действие, которое нужно предпринять, когда
/**
* 分支处理接口
**/
@FunctionalInterface
public interface BranchHandle {
/**
* 分支操作
*
* @param trueHandle 为true时要进行的操作
* @param falseHandle 为false时要进行的操作
* @return void
**/
void trueOrFalseHandle(Runnable trueHandle, Runnable falseHandle);
}
- написать метод оценки
СоздатьisTureOrFalse
метод, возвращаемое значение метода только что определено函数式接口
-BranchHandle
.
/**
* 参数为true或false时,分别进行不同的操作
*
* @param b
* @return com.example.demo.func.BranchHandle
**/
public static BranchHandle isTureOrFalse(boolean b){
return (trueHandle, falseHandle) -> {
if (b){
trueHandle.run();
} else {
falseHandle.run();
}
};
}
- Как пользоваться
Параметрыtrue
когда, выполнитьtrueHandle
Параметрыfalse
когда, выполнитьfalseHandle
Если есть значение, выполните потребляющую операцию, в противном случае выполните операцию с нулевым значением.
- определить функцию
СоздатьPresentOrElseHandler
Функциональный интерфейс интерфейса, одним из параметров интерфейса являетсяConsumer
интерфейс. один дляRunnable
, соответственно представляющие операцию потребления, когда значение не пусто, и другие операции, выполняемые, когда значение пусто
/**
* 空值与非空值分支处理
*/
public interface PresentOrElseHandler<T extends Object> {
/**
* 值不为空时执行消费操作
* 值为空时执行其他的操作
*
* @param action 值不为空时,执行的消费操作
* @param emptyAction 值为空时,执行的操作
* @return void
**/
void presentOrElseHandle(Consumer<? super T> action, Runnable emptyAction);
}
- написать метод оценки
СоздатьisBlankOrNoBlank
метод, возвращаемое значение метода только что определено函数式接口
-PresentOrElseHandler
.
/**
* 参数为true或false时,分别进行不同的操作
*
* @param b
* @return com.example.demo.func.BranchHandle
**/
public static PresentOrElseHandler<?> isBlankOrNoBlank(String str){
return (consumer, runnable) -> {
if (str == null || str.length() == 0){
runnable.run();
} else {
consumer.accept(str);
}
};
}
- Как пользоваться
После вызова параметра параметра класса инструмента вызовите函数式接口
изpresentOrElseHandle
метод проходит черезConsumer
иRunnable
Если параметр не пуст, напечатайте параметр
Если параметр не пустой
конец
Function
Функциональный интерфейс естьjava 8
Очень важная функция, воспользуйтесь еюFunction
Функции могут значительно упростить код.