java根据不同的参数调用不同的实现类操作
作者:jast_00 发布时间:2021-11-08 17:05:16
本猿今天今天帮公司写第三支付接口的时候,灵机一动就想写一个扩展性比较的强的充值接口,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();
}
}
来源:https://blog.csdn.net/jast_00/article/details/53171884


猜你喜欢
- 最近项目上需要实现蓝牙传输apk的一个功能,能够搜索周围的蓝牙手机并分享文件。从需求上讲android手机自带的蓝牙传输模块就可以满足需要了
- java语言是一种面向对象的程序设计语言吗java语言是面向对象的程序设计语言支持部分或绝大部分面向对象特性(类和实例、封装性、继承、多态)
- 本文先为大家介绍如何利用缓存Cache方便地实现此功能。 Cache与Session这二个状态对像的其中有一个不同之处,Cache是一个全局
- 看到ios版上QQ刷新效果像水滴,然后自己也想着去实现这样的效果,这篇文章暂时没有介绍下拉刷新的效果,只是单独用一个控件来实现这样的水滴效果
- 本文实例讲述了C#中实现一次执行多条带GO的sql语句。分享给大家供大家参考。具体如下:using System;using System.
- 目录微服务微服务架构SpringCould简介环境搭建1. 创建数据库2. 新建一个子模块api3. 新建一个子模块provider作为服务
- Android EditText的光标的显示和隐藏一、java代码1.编辑框的光标 显示的方法:editText.setCursorVisi
- 本文实例为大家分享了SpringBoot使用POI进行Excel下载的具体代码,供大家参考,具体内容如下使用poi处理Excel特别方便,此
- 在为什么阿里巴巴不建议在for循环中使用”+”进行字符串拼接一文中,我们介绍了几种Java中字符串拼接的方式,以及优缺点。其中还有一个重要的
- 悬浮窗在安卓中实现起来还是比较容易的,这几天在网上温习了相关资料,运行在我安卓6.0手机上才发现,原来在6.0手机上不是行的。第一反应肯定是
- 背景公司的开发框架集成了附件本地存储,阿里云,华为云等,现项目有要求附件存储与应用部署环境不能是同一台服务器,也不能使用云存储,经过技术选型
- 本文实例讲述了C#中Socket通信用法。分享给大家供大家参考。具体如下:一、UDP方式:服务器端代码:static void Main(s
- WPF 如何实现简单放大镜框架使用.NET40;Visual Studio 2019;实现此功能需要用到 VisualBrush&
- 背景:SpringMVC如何响应json格式的数据?技术实现方式1:在Controller使用@RestController注解方式2:在C
- 目录前言演示效果:实现步骤:核心点:总结前言流布局在在项目中还是会时不时地用到的,比如在搜索历史记录,分类,热门词语等可用标签来显示的,都可
- 本文实例为大家分享了C#实现QQ聊天窗口的具体代码,供大家参考,具体内容如下分析需要两个TextBox,一个用于显示消息,一个用于编辑消息需
- 用TabHost 来实现顶部选项卡,上代码:activity_main.xml<?xml version="1.0"
- 今天因为工作需要,把以前编写的一个GPS测试程序拿出来重新修改了一下。这个程序说起来有些历史了,是我11年编写的,那时候学了Android开
- reduce()简介Reduce 原意:减少,缩小根据指定的计算模型将Stream中的值计算得到一个最终结果解释:reduce 操
- (一)什么是微服务网关后端写完所有的微服务之后,最终是要交给前端去调用。我们都知道每个微服务都有各自的端口号,如果前端直接通过IP加端口的方