java中接口的实现方式

打印 上一主题 下一主题

主题 916|帖子 916|积分 2748

目录

Java8 接口初始化的几种场景

通过接口实现类的方式实现

代码实现
  1. public interface MyService {
  2.     void sayMessage(String message);
  3.     default void doWork1() { System.out.println("doWork"); }
  4.     static void printHello() {System.out.println("Hello"); }
  5. }
  6. //接口实现
  7. public class MyServiceImpl implements MyService{
  8.     @Override
  9.     public void sayMessage(String message) {
  10.         System.out.println(message);
  11.     }
  12. }
  13. //测试方法
  14. MyService myService=new MyServiceImpl();
  15. myService.sayMessage("hello,welcome");
  16. //hello,welcome
复制代码
通过匿名内部类的来实现

代码实现
  1. MyService myService=new MyService(){
  2.             @Override
  3.             public void sayMessage(String message) {
  4.                   System.out.println(message);
  5.             }
  6.         };
  7. //测试方法
  8. myService.sayMessage("hello,welcome");
  9. //hello,welcome
复制代码
通过JDK8 双冒号用法方式

代码实现
  1. void showMessage(String mssage){
  2.         System.out.println(mssage);
  3.     }
  4. MyService myService3=this::showMessage;
  5. myService3.sayMessage("hello,jack");
复制代码
通过箭头函数Lambda表达式的方式

代码实现
  1. //定义函数式接口
  2. @FunctionalInterface
  3. public interface YourService<T,R> {
  4.     List<R> map(List<T> src, Function<T, R> mapper, Class<R> targetType);
  5. }
  6. /*@FunctionalInterface 注解申明一个函数式接口,这样就可以采用箭头函数的方式来实现接口,如果接口中默认只定义了一个方法,则@FunctionalInterface注解可以省略
  7. */
  8. // 接口实现
  9. //通过箭头函数Lambda表达式来实现
  10. YourService<Student, Person> ysImpl = (item1, item2, item3) -> {
  11.     List<Person> persons2 = new ArrayList<Person>();
  12.     for (Student stu : item1) {
  13.         persons2.add(item2.apply(stu));
  14.     }
  15.     return persons2;
  16. };
  17. //测试
  18. List<Student> students = new ArrayList<Student>() {
  19.             {
  20.                 add(new Student(0, 10, "a"));
  21.                 add(new Student(1, 20, "b"));
  22.                 add(new Student(2, 30, "c"));
  23.                 add(new Student(3, 40, "d"));
  24.             }
  25.         };
  26.   List<Person> personsBew = ysImpl.map(students, (r) -> {
  27.             Person person = new Person();
  28.             BeanUtils.copyProperties(r, person);
  29.             return person;
  30.         }, Person.class);
  31. System.out.println(personsBew.toString());
复制代码
[TestRunner.Person(id=0, age=10, firstName=a), TestRunner.Person(id=1, age=20, firstName=b), TestRunner.Person(id=2, age=30, firstName=c), TestRunner.Person(id=3, age=40, firstName=d)]
将接口作为方法参数

代码实现
  1.     //将接口作为方法形参
  2.     private <T, R> void testMethod(List<T> rList, YourService<T, R> service, Class<R> target) {
  3.         
  4.         List<R> rlist = service.map(rList, (t) -> {
  5.             R r = null;
  6.             try {
  7.                
  8.                 r = (R) target.newInstance();
  9.                 BeanUtils.copyProperties(t, r);
  10.             } catch (InstantiationException | IllegalAccessException e) {
  11.                 e.printStackTrace();
  12.                 System.out.println(e.toString());
  13.             }
  14.             return r;
  15.         }, target);
  16.         System.out.println(rlist.toString());
  17.     }
  18. //调用方法并实现接口方法
  19. testMethod(students, (item1, item2, item3) -> {
  20.     List<Person> persons2 = new ArrayList<Person>();
  21.     for (Student stu : item1) {
  22.         persons2.add(item2.apply(stu));
  23.     }
  24.     return persons2;
  25. }, Person.class);
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

滴水恩情

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表