首页 > 编程语言 >java中接口的实现方式

java中接口的实现方式

时间:2023-10-16 17:15:01浏览次数:41  
标签:java 方式 System 接口 Person println new out

目录

Java8 接口初始化的几种场景

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

1. 定义接口

public interface MyService {

    void sayMessage(String message);

    default void doWork1() { System.out.println("doWork"); }

    static void printHello() {System.out.println("Hello"); }
}

2. 接口实现

public class MyServiceImpl implements MyService{

    @Override
    public void sayMessage(String message) {
        System.out.println(message);
    }

}

3. 测试方法

MyService myService=new MyServiceImpl();

myService.sayMessage("hello,welcome");
 //hello,welcome

通过匿名内部类的来实现

接口实现

 MyService myService=new MyService(){

            @Override
            public void sayMessage(String message) {
                  System.out.println(message);
            }

        };

3. 测试方法

myService.sayMessage("hello,welcome");
 //hello,welcome

通过方法的引用

1. 实现

void showMessage(String mssage){
        System.out.println(mssage);
    }

MyService myService3=this::showMessage;
myService3.sayMessage("hello,jack");

通过箭头函数Lambda表达式的方式

1. 定义接口

@FunctionalInterface
public interface YourService<T,R> {

    List<R> map(List<T> src, Function<T, R> mapper, Class<R> targetType);

}

@FunctionalInterface 注解申明一个函数式接口,这样就可以采用箭头函数的方式来实现接口,如果接口中默认只定义了一个方法,则@FunctionalInterface注解可以省略

2. 接口实现

/**
 * 通过箭头函数Lambda表达式来实现
 * **/
YourService<Student, Person> ysImpl = (item1, item2, item3) -> {
    List<Person> persons2 = new ArrayList<Person>();
    for (Student stu : item1) {
        persons2.add(item2.apply(stu));
    }
    return persons2;
};

3. 测试方法

List<Student> students = new ArrayList<Student>() {
            {
                add(new Student(0, 10, "a"));
                add(new Student(1, 20, "b"));
                add(new Student(2, 30, "c"));
                add(new Student(3, 40, "d"));
            }
        };

  List<Person> personsBew = ysImpl.map(students, (r) -> {
            Person person = new Person();
            BeanUtils.copyProperties(r, person);
            return person;
        }, Person.class);

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. 定义一个方法

/**
     * 将接口作为方法形参
     */
    private <T, R> void testMethod(List<T> rList, YourService<T, R> service, Class<R> target) {
        
        List<R> rlist = service.map(rList, (t) -> {
            R r = null;
            try {
                
                r = (R) target.newInstance();
                BeanUtils.copyProperties(t, r);
            } catch (InstantiationException | IllegalAccessException e) {

                e.printStackTrace();
                System.out.println(e.toString());
            }
            return r;
        }, target);
        System.out.println(rlist.toString());
    }

2. 调用方法并实现接口方法

testMethod(students, (item1, item2, item3) -> {
    List<Person> persons2 = new ArrayList<Person>();
    for (Student stu : item1) {
        persons2.add(item2.apply(stu));
    }
    return persons2;
}, Person.class);

标签:java,方式,System,接口,Person,println,new,out
From: https://www.cnblogs.com/airven/p/17767789.html

相关文章

  • Java 中的异常处理
    在Java中,异常是中断程序正常流程的事件。当发生意外情况时,会引发异常。如果没有正确的处理,这些异常可能会使您的程序崩溃。Java提供了强大的异常处理机制,确保您的代码能够优雅地处理意外情况。异常可能由多种因素引起,例如:用户输入错误硬件故障网络连接错误数据库错误编程......
  • 路飞学城之多方式登录、短信验证码
    一、多方式登录1、思路分析#分析 前端携带的数据:{username:用户名或手机号或邮箱,password:md5(密码)}注册的时候:密码也是md5加密后带过来的我们登录的时候,带的密码是md5加密的---》后端校验通不过#后端: -request.data中取出来-校验用户名密码是否正......
  • Java拾贝第三天——面向对象2
    继承性面向对象三大特性:封装性,继承性,多态性。继承的作用是避免出现大幅度的相同代码,提高代码的复用性。//现有一个Person类,拥有name,age属性classPerson{privateStringname;privateintage;//构造方法和setter,getter现在有一个Student类,它和Person类的属性......
  • Java Assert断言使用
    目录断言所谓的assertion,是jdk1.4后加入的新功能。作用它主要使用在代码开发和测试时期,用于对某些关键数据的判断,如果这个关键数据不是你程序所预期的数据,程序就提出警告或退出。后续当软件正式发布后,可以取消断言部分的代码。java中使用assert作为断言的一个关......
  • java web
    0.了解maven1.了解http协议2.了解tmcat的作用3.了解请求响应4.了解分层解耦5.了解servlet原理Maven为java世界引入了一个新的依赖管理系统jar包管理jar包升级时修改配置文件即可......
  • Java设计模式
    七大设计原则开闭原则:是指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭依赖倒置原则:是指设计代码结构时,高层模块不应该依赖底层模块,二者都应该依赖其抽象而不依赖于具体。单一职责原则:是指一个Class/Interface/Method只负责一项职责。接口隔离原则:是指用多个专......
  • Java常见集合类学习笔记
    List1.ArrayListVectorLinkedList区别​ ArrayList和Vector底层实现基本相同,都是基于数组实现的,只是Vector的方法用synchronized修饰;所以ArrayList是线程不安全的,Vector是线程安全的。​ LinkedList底层基于双向链表实现,方法没有用synchronized修饰,线程不安全。2.数组和......
  • Java大文件上传详解及实例代码
    前言:上周遇到这样一个问题,客户上传高清视频(1G以上)的时候上传失败。一开始以为是session过期或者文件大小受系统限制,导致的错误。查看了系统的配置文件没有看到文件大小限制,web.xml中seesiontimeout是30,我把它改成了120。但还是不行,有时候10分钟就崩了。同事说,可能是客户这里服......
  • java -jar命令及SpringBoot通过java -jav启动项目的过程
    本篇文章将为大家讲述关于SpringBoot项目工程完成后,是如何通过java-jar命令来启动的,以及介绍java-jar命令的详细内容,对SpringBootjava-jav启动过程感兴趣的朋友跟随小编一起看看吧本篇文章将为大家讲述关于SpringBoot项目工程完成后,是如何通过java-jar命令来启动的......
  • Java 常用中间件
    Java常用中间件1、网关Nginx、Kong、Zuul、Gateway2、缓存Redis、MemCached、OsCache、EhCache3、搜索ElasticSearch、Solr4、熔断Hystrix、resilience4j5、负载均衡DNS、F5、LVS、Nginx、OpenResty、HAproxy6、注册中心Nacos、Eureka、Zookeeper、Redis、Etcd、Cons......