java根据不同的参数调用不同的实现类操作

 更新时间:2020年09月24日 10:54:41   作者:jast_00  
这篇文章主要介绍了java根据不同的参数调用不同的实现类操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

本猿今天今天帮公司写第三支付接口的时候,灵机一动就想写一个扩展性比较的强的充值接口,t通过选择不同的充值渠道,调用不同的充值实现类(好了,废话不多说了,上码!!!!!)

首先你得写一个接口(楼主用的框架是springMVC +Spring +嘿嘿)PayService

然后写你的PayService实现类 EcpssPayService(第三方接口实现类)和 ReapalPayService(第三方接口实现类) 注意几点(注解一定得跟上)

好了之后 就可以 写一个工具类了 SpringBeanUtil(这其中至于违背了Spring的 依赖注入思想 慎用什么的 我只想说你爱用不用 嘿嘿)

写好了之后(ok完工了), 接下来你就可以在Controller中调用了(你通过前端传过来的参数payWay来调用不同的实现类:比如说我传过来的是reapal

那么就掉用ReapalService类,传过来的是ecpss那么就调用EcpssPayService!).

最后再说下你的实现类一定是在Spring 加载扫描包的时候能扫描到,否则你就Duang了如果爆了类未定义少年那只能说明你还年轻 嘿嘿 去看看applicationContext.xml如下

看看component-scan 有没有扫描到你的两个实现类的包的路径 over!!!!

补充知识:在java类中实现不同接口的同名方法时,该方法属于哪个接口?

存在这样一种情况,有一个类实现了两个接口,在这两个接口当中有相同的方法(同名同参),那么类中的该实现方法属于哪个接口的呢?

public interface InterfaceA {
  void method();
  void methodA();
}

public interface InterfaceB {
  void method();
  void methodB();
}

public class Subject implements InterfaceA, InterfaceB {

  @Override
  public void method() {

  }

  @Override
  public void methodB() {

  }

  @Override
  public void methodA() {

  }
}

Subject类实现了InterfaceA和InterfaceB两个接口的方法,其中method是InterfaceA和InterfaceB共用的相同方法,那么Subject类中实现的该方法是属于哪个接口的呢?

答案是既是InterfaceA的也是InterfaceB的,什么意思?就是说此时的Subject类你既可以把它当做InterfaceA来使用其中的method方法,也可以把它当做InterfaceB来使用其中的method方法。

Java对于implements的要求是只要在接口中声明的方法,在实现类中必须要实现它,单看Subject 类,它里面具有method和methodA两个方法,因此它就是实现了InterfaceA接口所有方法的实现类,同时它里面具有method和methodB两个方法,因此它也是实现了InterfaceB接口所有方法的实现类。

因此,在使用Subject 类的时候,如果你认为它是InterfaceA,那它就是InterfaceA,如果你为它是InterfaceB,那它就是InterfaceB。

所以可以像下面这样去使用它,完全没有问题:

public class Main {

  public static void main(String[] args) {
    //我现在认为它是一个InterfaceA实现类, 就把它当做一个InterfaceA接口来使用
    InterfaceA interfaceA = new Subject();
    interfaceA.method();
    interfaceA.methodA();

    test(interfaceA);

    //我现在认为它是一个InterfaceB实现类, 就把它当做一个InterfaceB接口来使用
    InterfaceB interfaceB = new Subject();
    interfaceB.method();
    interfaceB.methodB();

    //下面都是完全没问题的
    Subject subject = new Subject();
    subject.myMethod();
    //当成InterfaceA用
    interfaceA = subject;
    interfaceA.method();
    interfaceA.methodA();
    //当成InterfaceA用的过程中又可以当成InterfaceB用
    interfaceB = subject;
    interfaceB.method();
    interfaceB.methodB();
    //当成InterfaceB用的过程中又可以再当成InterfaceA用
    interfaceA = (InterfaceA) interfaceB;
    interfaceA.method();
    interfaceA.methodA();
    //...随便用...
  }

  private static void test(InterfaceA interfaceA){
    //如果我知道InterfaceA的实现类同时也implements了InterfaceB
    // 那么我就可以把它当做InterfaceB的实现类来使用
    InterfaceB interfaceB = (InterfaceB) interfaceA;
    interfaceB.method();
    interfaceB.methodB();
  }
}

以上这篇java根据不同的参数调用不同的实现类操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot条件注解之@ConditionalOnProperty完全解析

    Spring Boot条件注解之@ConditionalOnProperty完全解析

    这篇文章主要介绍了SpringBoot中的@ConditionalOnProperty注解,通过配置文件属性值控制Bean或配置类的加载,实现功能开关和环境配置,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • Java使用openOffice对于word的转换及遇到的问题解决

    Java使用openOffice对于word的转换及遇到的问题解决

    开发过程中经常会使用java将office系列文档转换为PDF, 一般都使用微软提供的openoffice+jodconverter 实现转换文档,下面这篇文章主要给大家介绍了关于Java通过openOffice对于word的转换及遇到问题的解决方法,需要的朋友可以参考下
    2018-09-09
  • JavaWeb实战之编写单元测试类测试数据库操作

    JavaWeb实战之编写单元测试类测试数据库操作

    这篇文章主要介绍了JavaWeb实战之编写单元测试类测试数据库操作,文中有非常详细的代码示例,对正在学习javaweb的小伙伴们有很大的帮助,需要的朋友可以参考下
    2021-04-04
  • 深入理解LinkedHashSet集合的底层机制

    深入理解LinkedHashSet集合的底层机制

    这篇文章主要介绍了LinkedHashSet的底层机制详解,LinkedHashSet根据元素的hashCode值来决定元素的存储位置,同时使用链表维护元素的次序, 这使得元素看起来是以插入顺序保存的,需要的朋友可以参考下
    2023-10-10
  • Spring Cloud实现微服务调用的负载均衡(详解)

    Spring Cloud实现微服务调用的负载均衡(详解)

    负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上进行执行,根据负载均衡发生位置的不同,一般分为服务端负载均衡和客户端负载均衡,本文给大家介绍Spring Cloud实现微服务调用的负载均衡的相关知识,感兴趣的朋友一起看看吧
    2024-03-03
  • Jenkins初级使用过程中的异常处理

    Jenkins初级使用过程中的异常处理

    这篇文章主要为大家介绍了Jenkins初级使用过程中的异常处理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • Java FineReport报表工具导出EXCEL的四种方式

    Java FineReport报表工具导出EXCEL的四种方式

    这篇文章主要介绍了Java FineReport报表工具导出EXCEL的四种方式的相关资料,需要的朋友可以参考下
    2016-03-03
  • 浅析非对称加密在接口参数中的实现

    浅析非对称加密在接口参数中的实现

    接口层做数据加密应该算是老生常谈的一件事了,业界用的比较多的,不外乎是对称加密,非对称加密以及两者的结合。本文就来聊聊非对称加密在接口参数中的实现,希望对大家有所帮助
    2023-02-02
  • 亲手教你SpringBoot中的多数据源集成问题

    亲手教你SpringBoot中的多数据源集成问题

    本文主要是介绍基于springboot的多数据源切换,轻量级的一种集成方案,对于小型的应用可以采用这种方案,我之前在项目中用到是因为简单,便于扩展以及优化,对SpringBoot多数据源集成问题感兴趣的朋友一起看看吧
    2022-03-03
  • JAVA Springboot配置i18n国际化语言详细步骤

    JAVA Springboot配置i18n国际化语言详细步骤

    国际化(Internationalization,缩写为i18n)是指根据来展示不同的内容,使应用程序能够适应不同的语言和文化习惯,下面这篇文章主要给大家介绍了关于JAVA Springboot配置i18n国际化语言的详细步骤,需要的朋友可以参考下
    2024-08-08

最新评论