java根據(jù)不同的參數(shù)調(diào)用不同的實(shí)現(xiàn)類操作
本猿今天今天幫公司寫第三支付接口的時(shí)候,靈機(jī)一動就想寫一個(gè)擴(kuò)展性比較的強(qiáng)的充值接口,t通過選擇不同的充值渠道,調(diào)用不同的充值實(shí)現(xiàn)類(好了,廢話不多說了,上碼!?。。。。?/p>
首先你得寫一個(gè)接口(樓主用的框架是springMVC +Spring +嘿嘿)PayService
然后寫你的PayService實(shí)現(xiàn)類 EcpssPayService(第三方接口實(shí)現(xiàn)類)和 ReapalPayService(第三方接口實(shí)現(xiàn)類) 注意幾點(diǎn)(注解一定得跟上)
好了之后 就可以 寫一個(gè)工具類了 SpringBeanUtil(這其中至于違背了Spring的 依賴注入思想 慎用什么的 我只想說你愛用不用 嘿嘿)
寫好了之后(ok完工了), 接下來你就可以在Controller中調(diào)用了(你通過前端傳過來的參數(shù)payWay來調(diào)用不同的實(shí)現(xiàn)類:比如說我傳過來的是reapal
那么就掉用ReapalService類,傳過來的是ecpss那么就調(diào)用EcpssPayService!).
最后再說下你的實(shí)現(xiàn)類一定是在Spring 加載掃描包的時(shí)候能掃描到,否則你就Duang了如果爆了類未定義少年那只能說明你還年輕 嘿嘿 去看看applicationContext.xml如下
看看component-scan 有沒有掃描到你的兩個(gè)實(shí)現(xiàn)類的包的路徑 over!?。。?/p>
補(bǔ)充知識:在java類中實(shí)現(xiàn)不同接口的同名方法時(shí),該方法屬于哪個(gè)接口?
存在這樣一種情況,有一個(gè)類實(shí)現(xiàn)了兩個(gè)接口,在這兩個(gè)接口當(dāng)中有相同的方法(同名同參),那么類中的該實(shí)現(xiàn)方法屬于哪個(gè)接口的呢?
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類實(shí)現(xiàn)了InterfaceA和InterfaceB兩個(gè)接口的方法,其中method是InterfaceA和InterfaceB共用的相同方法,那么Subject類中實(shí)現(xiàn)的該方法是屬于哪個(gè)接口的呢?
答案是既是InterfaceA的也是InterfaceB的,什么意思?就是說此時(shí)的Subject類你既可以把它當(dāng)做InterfaceA來使用其中的method方法,也可以把它當(dāng)做InterfaceB來使用其中的method方法。
Java對于implements的要求是只要在接口中聲明的方法,在實(shí)現(xiàn)類中必須要實(shí)現(xiàn)它,單看Subject 類,它里面具有method和methodA兩個(gè)方法,因此它就是實(shí)現(xiàn)了InterfaceA接口所有方法的實(shí)現(xiàn)類,同時(shí)它里面具有method和methodB兩個(gè)方法,因此它也是實(shí)現(xiàn)了InterfaceB接口所有方法的實(shí)現(xiàn)類。
因此,在使用Subject 類的時(shí)候,如果你認(rèn)為它是InterfaceA,那它就是InterfaceA,如果你為它是InterfaceB,那它就是InterfaceB。
所以可以像下面這樣去使用它,完全沒有問題:
public class Main { public static void main(String[] args) { //我現(xiàn)在認(rèn)為它是一個(gè)InterfaceA實(shí)現(xiàn)類, 就把它當(dāng)做一個(gè)InterfaceA接口來使用 InterfaceA interfaceA = new Subject(); interfaceA.method(); interfaceA.methodA(); test(interfaceA); //我現(xiàn)在認(rèn)為它是一個(gè)InterfaceB實(shí)現(xiàn)類, 就把它當(dāng)做一個(gè)InterfaceB接口來使用 InterfaceB interfaceB = new Subject(); interfaceB.method(); interfaceB.methodB(); //下面都是完全沒問題的 Subject subject = new Subject(); subject.myMethod(); //當(dāng)成InterfaceA用 interfaceA = subject; interfaceA.method(); interfaceA.methodA(); //當(dāng)成InterfaceA用的過程中又可以當(dāng)成InterfaceB用 interfaceB = subject; interfaceB.method(); interfaceB.methodB(); //當(dāng)成InterfaceB用的過程中又可以再當(dāng)成InterfaceA用 interfaceA = (InterfaceA) interfaceB; interfaceA.method(); interfaceA.methodA(); //...隨便用... } private static void test(InterfaceA interfaceA){ //如果我知道InterfaceA的實(shí)現(xiàn)類同時(shí)也implements了InterfaceB // 那么我就可以把它當(dāng)做InterfaceB的實(shí)現(xiàn)類來使用 InterfaceB interfaceB = (InterfaceB) interfaceA; interfaceB.method(); interfaceB.methodB(); } }
以上這篇java根據(jù)不同的參數(shù)調(diào)用不同的實(shí)現(xiàn)類操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- java圖片對比度調(diào)整示例代碼
- Java實(shí)現(xiàn)圖片對比功能
- Java Map接口及其實(shí)現(xiàn)類原理解析
- Java獲取接口所有實(shí)現(xiàn)類的方式詳解
- java中List集合及其實(shí)現(xiàn)類的方法詳解
- Java動態(tài)獲取實(shí)現(xiàn)某個(gè)接口下所有的實(shí)現(xiàn)類對象集合
- thinkPHP框架實(shí)現(xiàn)類似java過濾器的簡單方法示例
- java 集合之實(shí)現(xiàn)類ArrayList和LinkedList的方法
- 詳解Kotlin中如何實(shí)現(xiàn)類似Java或C#中的靜態(tài)方法
- Java 照片對比功能的實(shí)現(xiàn)
相關(guān)文章
SpringBoot實(shí)現(xiàn)RAS+AES自動接口解密
本文主要介紹了SpringBoot實(shí)現(xiàn)RAS+AES自動接口解密,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03SpringBoot實(shí)現(xiàn)動態(tài)多線程并發(fā)定時(shí)任務(wù)
這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)動態(tài)多線程并發(fā)定時(shí)任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05使用IDEA如何打包發(fā)布SpringBoot并部署到云服務(wù)器
這篇文章主要介紹了使用IDEA如何打包發(fā)布SpringBoot并部署到云服務(wù)器問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Java 獲取服務(wù)器環(huán)境的實(shí)例詳解
這篇文章主要介紹了Java 獲取服務(wù)器環(huán)境的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例和輸出結(jié)果,希望能幫助大家理解,需要的朋友可以參考下2017-07-07SpringBoot詳細(xì)講解異步任務(wù)如何獲取HttpServletRequest
在使用框架日常開發(fā)中需要在controller中進(jìn)行一些異步操作減少請求時(shí)間,但是發(fā)現(xiàn)在使用@Anysc注解后會出現(xiàn)Request對象無法獲取的情況,本文就此情況給出完整的解決方案2022-04-04Java實(shí)現(xiàn)的二叉樹常用操作【前序建樹,前中后遞歸非遞歸遍歷及層序遍歷】
這篇文章主要介紹了Java實(shí)現(xiàn)的二叉樹常用操作,包括二叉樹的前序建樹,前中后遞歸非遞歸遍歷及層序遍歷等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01Spring?@Scheduled定時(shí)器注解使用方式
這篇文章主要介紹了Spring?@Scheduled定時(shí)器注解使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08SpringBoot集成thymeleaf渲染html模板的步驟詳解
這篇文章主要給大家詳細(xì)介紹了SpringBoot集成thymeleaf如何使實(shí)現(xiàn)html模板的渲染,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下2023-06-06Java編程通過list接口實(shí)現(xiàn)數(shù)據(jù)的增刪改查代碼示例
這篇文章是介紹Java編程基礎(chǔ)方面的內(nèi)容,涉及l(fā)ist接口的操作,通過list接口實(shí)現(xiàn)對數(shù)據(jù)的增刪改查的相關(guān)代碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10