gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 32 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章java根据不同的参数调用不同的实现类操作由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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.

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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根据不同的参数调用不同的实现类操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/jast_00/article/details/53171884 。

最后此篇关于java根据不同的参数调用不同的实现类操作的文章就讲到这里了,如果你想了解更多关于java根据不同的参数调用不同的实现类操作的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com