java中接口的实现方式

这篇具有很好参考价值的文章主要介绍了java中接口的实现方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录
  • Java8 接口初始化的几种场景
    • 通过接口实现类的方式实现
      • 代码实现
    • 通过匿名内部类的来实现
      • 代码实现
    • 通过JDK8 双冒号用法方式
      • 代码实现
    • 通过箭头函数Lambda表达式的方式
      • 代码实现
    • 将接口作为方法参数
      • 代码实现

Java8 接口初始化的几种场景

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

代码实现

public interface MyService {

    void sayMessage(String message);

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

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

//接口实现
public class MyServiceImpl implements MyService{

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

}

//测试方法
MyService myService=new MyServiceImpl();

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

通过匿名内部类的来实现

代码实现

 MyService myService=new MyService(){

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

        };


//测试方法
myService.sayMessage("hello,welcome");
 //hello,welcome

通过JDK8 双冒号用法方式

代码实现

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

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

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

代码实现

//定义函数式接口
@FunctionalInterface
public interface YourService<T,R> {

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

}

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

// 接口实现
//通过箭头函数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;
};

//测试
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)]文章来源地址https://www.toymoban.com/news/detail-711583.html

将接口作为方法参数

代码实现

    //将接口作为方法形参
    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());
    }

//调用方法并实现接口方法
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中接口的实现方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java之初始化顺序实践

    在创建Java对象时,需要将对象中的成员变量进行初始化后,才能调用对象的构造方法创建对象。本文中将会讲解初始化时父类与子类对应的顺序。 场景1:父类、子类的初始化顺序 用例代码 结果输出 结果分析 先初始化静态块:父类的静态块 - 子类的静态块。 再初始化非静

    2024年02月11日
    浏览(40)
  • java中初始化数组的方法

    方式一: 注:此种方式创建的数组,如不显式初始化数组元素,则各元素为当前数据类型的默认值。基本数据类型为0,对象类型为null。所以使用前需要将各元素显式赋值。 方式二: 注:此方式与方式一的结果相同,但是更简便。 方式三: 注:此方式与方式一和方式二的结

    2024年02月12日
    浏览(44)
  • Java集合类型对象的快速初始化

    在Java中, 集合类型的对象初始化, 一般是先创建对象, 然后往集合里面增加元素,这种写法直观,但是撰写代码的时候感觉比较冗余, 是否有什么酷炫的方式简化定义初始化呢? 本篇介绍字符串数组、List 和 Map类型对象的定义初始化简单方式。 常用的写法: 简化的写法

    2024年02月06日
    浏览(41)
  • Java HashMap初始化大小设置多少合适

    修改公司老代码的时候,发现阿里编码规约插件提示HashMap初始化时尽量指定初始值大小,因为设置合理的初始值可以提升性能:   HashMap继承自AbstractMap类,实现了Map、Cloneable、java.io.Serializable接口 , 是基于散列表实现的双列集合,它存储的是key-value键值对映射,每个key-va

    2024年02月09日
    浏览(48)
  • 【Java】构造方法及类的初始化

    活动地址:CSDN21天学习挑战赛 ✨ 博客主页: XIN-XIANG荣 ✨ 系列专栏: 【Java SE】 ✨ 一句短话: 难在坚持,贵在坚持,成在坚持! 构造方法(也称为构造器)是一个特殊的成员方法,其名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。

    2023年04月10日
    浏览(41)
  • Java中Map集合初始化并赋值

    Java中Map集合初始化并赋值的几种方式:

    2024年02月11日
    浏览(52)
  • Java 中 Map 初始化的几种方法

    方式1:传统方式 方式2:java8新特性-双括号初始化 匿名内部类通常会导致内存泄漏问题,因为它会隐式地持有外部类的引用,如果外部类的引用一直存在而没有释放,它所持有的内存也就不会被垃圾回收机制回收,产生内存泄漏。而通过使用静态内部类或者弱引用等技术可以

    2024年02月05日
    浏览(52)
  • Java开源项目mall学习笔记(1)——项目初始化

            该笔记是记录学习开源项目mall过程的文档笔记,完全原创,转载请声明。同时也对开源项目的作者表示感谢! mall: 🔥 mall项目是一套基于 SpringBoot + Vue + uni-app 实现的电商系统,包括前台商城项目及后台管理系统,采用Docker容器化部署。前台商城系统包含首页门户

    2024年02月12日
    浏览(43)
  • 官答|初始化GreatSQL报错无法找到数据目录或初始化数据字典失败

    GreatSQL推出新栏目——官答 官答栏目针对GreatSQL数据库中的问题,选取官方论坛和讨论群中的典型提问进行深入解答。内容涵盖数据库安装部署、配置优化、故障排查、性能测试等方面。 在文章中,我们不仅提供解决方案,还会结合实例深入剖析问题的成因,提升读者对GreatSQL数据

    2024年02月04日
    浏览(62)
  • 【Java】Java中类的初始化顺序(静态方法,静态块,非静态块,最后有流程图)

       📝个人主页:哈__ 期待您的关注  在日常使用Java的时候,我们都接触过 new 这个,那你是否知道在我们的对象真正创建出来之前都做了哪些事情呢? 实际上要去判断一个类的初始化的顺序,需要分一下情况,一种是没有继承关系的类(不考虑 Object 类),一种是有

    2024年04月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包