@FunctionalInterface
是 Java 中的一个注解,标识某个接口是一个函数式接口(Functional Interface)。函数式接口是指仅包含一个抽象方法的接口。该注解主要用于明确说明该接口是用于函数式编程的,并提供编译时的检查。
那么如何自定义一个函数接口,然有有多个实现。话不多说直接上代码~
1、创建一个实体UserViewTestModel
@Getter @Setter @AllArgsConstructor public class UserTestModel { private Long id; private String username; }
2、自定义一个函数接口
@FunctionalInterface public interface UserConsumer { void consume(UserTestModel data); }
3、创建多个接口实现TestF1、TestF2 。。。本测试只创建2个,想要更多,自行参照创建。
@Component public class TestF1 implements UserConsumer{ @Override public void consume(UserTestModel data) { System.out.println("TestF1==="+ JSONUtil.toJsonStr(data)); } }
@Component public class TestF2 implements UserConsumer{ @Override public void consume(UserTestModel data) { System.out.println("TestF2----"+ JSONUtil.toJsonStr(data)); } }
4、调用
@RestController @RequestMapping("/test") public class TestController { private final List<UserConsumer> consumerList; public TestController(List<UserConsumer> consumerList) { this.consumerList = consumerList; } @PostMapping("/func") public void func() { UserTestModel user = new UserTestModel(1L, "pack"); consumerList.forEach(t -> t.consume(user)); } }
结果输出
TestF1==={"id":1,"username":"pack"}
TestF2----{"id":1,"username":"pack"}