精华内容
下载资源
问答
  • 2018-09-27 21:23:31

    这是java 三大特性之一:多态的表现

    即 接口声明的变量 被赋值为该接口实现类的对象的引用

    如 List list = new ArrayList( );

    这里 List 是接口, ArrayList 是List 的实现类

    更多相关内容
  • 调用接口实现类的方式

    千次阅读 2019-08-29 10:24:14
    1.当要调用接口实现类时,有2种方法 (1)声明接口,实现类实例化 (2)通过配置文件的方式,用<bean>和<property>两个标签,决定使用接口的那个实现类 2.遇到的问题,别人写好使,我写不好使 (1)...

    1.当要调用接口的实现类时,有2种方法
    (1)声明接口,实现类实例化
    (2)通过配置文件的方式,用<bean>和<property>两个标签,决定使用接口的那个实现类
    2.遇到的问题,别人写好使,我写不好使
    (1)使用ssh开发,声明接口
        //PeForumCommentService 是接口
        private PeForumCommentService peForumCommentService;

        public PeForumCommentService getPeForumCommentService() {
            return peForumCommentService;
        }

        public void setPeForumCommentService(PeForumCommentService peForumCommentService) {
            this.peForumCommentService = peForumCommentService;
        }
    (2)调用接口
        resultMap=this.getPeForumCommentService().topicCommentDetail(topicId,type,ifTag);
    (3)正常这样调用是会报空指针的,因为接口对象是null,但是没有任何反应,应该是框架为了用户友好进行处理了,但是debuge并不会进入到getPeForumCommentService()方法中,当时我考虑到的就是应该去实例化实现类,不使用getPeForumCommentService()方法,果然生效了,但是并不知道为什么通过调用getPeForumCommentService()方式,别人的就好用,而且别人没有进行接口实现类的实例化,最后才发现,实在applicationContext.xml中通过配置<bean>和<property>的方式来使用的(其实也相当于实例化,只不过实在配置文件中处理的,目前不知到这样做到底有什么好处,感觉不但费劲,而且不容易发现问题,我找了将近2天的时间才找到原因)

    展开全文
  • java开发中调用一个接口的方法时是怎么调用到该接口实现类的?
  • springboot动态调用实现类

    千次阅读 2020-09-08 16:54:31
    现在需要在程序 中动态的去调用不通实现类中的方法getUser()。下面既是功能实现代码: 1、添加接口 package com.example.mavenceshi.service; /** * @author by CLP * @Classname UserReader * @Description ...

    因为项目需要,我们有一个功能的接口UserReader。其他的类都是实现这个接口。那么会有多个实现UserReader接口的实现类。现在需要在程序 中动态的去调用不通实现类中的方法getUser()。下面既是功能实现代码:

    1、添加接口

    package com.example.mavenceshi.service;
    
    /**
     * @author by CLP
     * @Classname UserReader
     * @Description
     * @Date 2020/9/8 15:16
     */
    public interface UserReader {
    
        String getUser();
    }
    
    

    2、创建实现类

    1)实现类UserReaderImpl1

    package com.example.mavenceshi.service.impl;
    
    import com.example.mavenceshi.service.UserReader;
    import org.springframework.stereotype.Component;
    
    /**
     * @author by CLP
     * @Classname UserReader1
     * @Description
     * @Date 2020/9/8 15:17
     */
    @Component
    public class UserReaderImpl1 implements UserReader {
        @Override
        public String getUser() {
               return "访问的UserReaderImpl1";
        }
    }
    
    

    2)实现类 UserReaderImpl2

    package com.example.mavenceshi.service.impl;
    
    import com.example.mavenceshi.service.UserReader;
    import org.springframework.stereotype.Component;
    
    /**
     * @author by CLP
     * @Classname UserReaderImpl2
     * @Description
     * @Date 2020/9/8 15:18
     */
    @Component
    public class UserReaderImpl2 implements UserReader {
        @Override
        public String getUser() {
              return "访问的UserReaderImpl2";
        }
    }
    
    

    3、获取实现类的相关接口

    package com.example.mavenceshi.config;
    
    import com.example.mavenceshi.service.UserReader;
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Component;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @author by CLP
     * @Classname BeanConfig
     * @Description
     * @Date 2020/9/8 15:28
     */
    @Component
    public class BeanConfig implements InitializingBean, ApplicationContextAware {
        private Map<String, UserReader> queryServiceImplMap = new HashMap<>();
        private ApplicationContext applicationContext;
    
        public UserReader createQueryService(String type) {
    
            UserReader userReader = queryServiceImplMap.get(type);
            if (userReader == null) {
                return queryServiceImplMap.get("UserReader1Impl");
            }
            return userReader;
        }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            Map<String, UserReader> beanMap = applicationContext.getBeansOfType(UserReader.class);
            //遍历该接口的所有实现,将其放入map中
            for (UserReader serviceImpl : beanMap.values()) {
                queryServiceImplMap.put(serviceImpl.getClass().getSimpleName(), serviceImpl);
            }
        }
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            this.applicationContext = applicationContext;
        }
    }
    
    

    4、写一个controller接口,实现动态调用

    package com.example.mavenceshi.controller;
    
    import com.example.mavenceshi.config.BeanConfig;
    import com.example.mavenceshi.service.UserReader;
    import com.example.mavenceshi.service.impl.UserReaderImpl1;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author by CLP
     * @Classname controller
     * @Description
     * @Date 2020/9/8 15:18
     */
    @RestController
    public class controller {
        @Autowired
        private UserReaderImpl1 userReader;
        @Autowired
        private BeanConfig beanConfig;
    
        @GetMapping("/get")
        public String get(String id) {
            UserReader queryService = beanConfig.createQueryService(id);
            System.out.println(queryService.toString());
            return queryService.getUser();
    
        }
    }
    
    

    5、启动运行与结果

    访问:http://localhost:8080/get?id=UserReaderImpl1
    在这里插入图片描述

    访问:http://localhost:8080/get?id=UserReaderImpl2
    在这里插入图片描述

    展开全文
  • java一个接口拥有多个实现类调用指定实现类

    1、接口如下

    /**
     * @author lichangyuan
     * @create 2021-02-26 0:37
     */
    public interface OrdinaryService {
        JsonData queryByKeywordPagination(Integer page, Integer counts,Object parameter[]);
    }
    

    2、有如下两个实现
    实现类一

    @Service("maintenanceService")
    public class MaintenanceServiceImpl implements MaintenanceService, OrdinaryService {
        @Override
        public JsonData queryByKeywordPagination(Integer page, Integer counts, Object[] parameter) {
            return null;
        }
    }
    

    实现类二

    @Service("inspectionService")
    public class InspectionServiceImpl implements InspectionService,OrdinaryService  {
        @Override
        public JsonData queryByKeywordPagination(Integer page, Integer counts, Object[] parameter) {
            return null;
        }
    }
    

    3、根据不同的条件调用不同的实现
    方法一

    @Resource(name="maintenanceService")
    OrdinaryService maintenanceService;
    	
    @Resource(name="inspectionService")
    OrdinaryService inspectionService;
    

    方法二

    @Autowired
    @Qualifier("maintenanceService")
    ShopPay weixinPay;
     
    @Autowired
    @Qualifier("inspectionService")
    ShopPay aliPay;
    
    展开全文
  • 一个接口对应多个实现类 一个接口对应对个实现类,需要注入指定的实现类。 如:Interface接口下有两个实现类InterfaceImpl1和InterfaceImpl2。 接口: package com.example.service; public interface Interface1...
  • 多态的特性,实现多态的方式有三种:重写、接口、抽象和抽象方法。 这里是接口的多态特性,并且使用的是动态绑定(后期绑定)
  • 一、简单例子:1.直接new一个实例,这样肯定知道用的哪个实例2....举个例子:A接口,A1,A2,A3实现A接口,有一个eat方法,A1:吃饭,A2:吃鱼,A3:吃肉需要得到"吃肉",那么Aa=newA3();需要得到"吃饭",那...
  • 接口实现类动态调用的两种方式

    千次阅读 2020-12-06 15:17:48
    接口实现类动态调用的两种方式 本篇内容: 一个接口在不同场景,需要有不同的实现类,实现动态调用 模拟场景: 学生、教师部分在中国,部分在泰国,处理方式需要区分,接口国际化支持会传入一个来源,根据来源...
  • java调用接口实现方法

    千次阅读 2021-03-14 10:41:26
    java调用接口实现方法发布时间:2020-06-29 11:08:46来源:亿速云阅读:...一个类实现了某一个接口就可以调用接口中的方法。接口可以理解为一种能力,例如:每种动物都有叫的能力,但是每种动物的叫声都不一样,叫...
  • 定义接口 public interface TestService { ... }
  • 一个接口多个实现类,如何指定特定实现类进行调用示例解决方法 在写程序的时候经常会遇到 写一个接口有多个实现类,那么在调用的时候是如何去确定调用的是哪个实现类呢?接下来将为你介绍几种方式: 示例 总接口 ...
  • 通过反射实现获取某个接口的所有实现类,前提是这些实现类需要在同一个包中。 1.定义接口 package com.lm.validate public interface IDataValidator{ boolean validate(String str); } 2.
  • 一个接口有多个实现类,Controller方法中动态调用具体都实现类接口实现类1实现类2ControllerSystem.out.println输出结果 接口 public interface IDemoService { public String test(); } 实现类1 @Service(...
  • 一个抽象接口,有很多实现类,通过接口调用某个方法的时候,怎么知道调用的是哪个实现类里的方法?谢谢。2014-07-02 更新前三个回答是可以,不过依然没有找到我想要的答案。比如在Eclipse里查看别人的jar包里的源码...
  • 一个接口有多个实现类,当调用接口中的方法时,如何判定用的是哪个实现类? 1.直接new一个子类实例,这样肯定知道用的哪个实例。 2.定义接口类型的变量,用某个实例去初始化,这样也可以确定用的哪个实例。 代码...
  • 实现动态调用,方法有很多种,在这里记下一种我觉得比较简单的,方便以后翻阅。 接口类 package com.su.mybatis.oracle.service; public interface TestService { String firstStep(); String secondStep()...
  • 通过反射动态获取抽象类实现,调用实现类中方法,JAVA通过反射动态的获取接口的所有实现类并实例化 开发过程中需要通过反射动态调用抽象类不同实现类中的方法,避免写过多if else语句
  • 1、 直接new一个实例,这样...3、用反射创建实现类或者实现类的子类对象,强转成接口类型 ICar iCar = (ICar) ServiceAnnotationSupport.serviceInjection(Class.forName("com.test.AodiCarPlus")); iCar.run(); ...
  • Java反射获取某个接口的所有实现类

    千次阅读 2021-02-27 14:56:00
    还是一样,我在写日志框架时遇到的问题,获取一个接口的所有实现类,但是我发现反射API中并没有或者实现类的API。无奈,只能自己动了。老样子,先上代码,后上教程:/*** 获取一个接口的所有实现类** @param target* @...
  • 查找接口的实现类: IDEA 风格 ctrl + alt +B IDEA快速实现接口快捷方式 ALT +INSERT 例如:查看Subject接口的实现类;...一....Ctrl + O 查看我们继承的类或者接口中的方法...查看接口实现类中方法(就是我们使用接...
  • Java反射调用接口类型参数的方法

    千次阅读 2019-08-15 20:47:23
    Java 中反射属于java高阶编程的一大法宝,无论是动态代理还是... 言归正传,近日在用反射调用第三方sdk中一个方法时候,发现了这个方法中带有接口类型的参数,一时不知如何传递接口参数,具体看下面的一个demo方法...
  • 这种情况恰可以使用debug,来查看具体调用的是哪个实现类的方法,操作如下: 1.打断点 2.以debug模式运行项目 3.在断点处,复制想要查看的代码,并在debugger控制台打印出来(回车键) 4.查看其真实类型 到此我...
  • idea打开接口实现类快捷键

    千次阅读 2020-09-17 15:49:49
    idea 打开接口实现类快捷键 一、以IRule接口为示例 1、在IRule接口页面,按【ctrl+h】,右侧出现当前接口的所有实现类,如图: 2、双击要进入的实现类即可进入实现类;
  • 经常遇到这样的一个需求,前端传的实体类型相同,后端需要根据实体中的某一个字符串,动态地调用某一个的方法。 在SpringBoot中,我们可以理解成,一个Controller接口对应多个ServiceImpl,使用这种方式,如果...
  • 一个接口有多个实现类调用方式

    千次阅读 2019-02-25 10:27:21
    A用户调用Aservice实现类,B用户调用Bservice实现类 1、使用switch-case public static Person printPerson(int kind) { Person p = null; switch (kind) { case FIRST: p = new A(&quot;人1&quot;);...
  • 正好用到。mark一下背景 ...其中重要的有BeanFactory,BeanFactory是IoC容器的核心接口,其职责包括:实例化、定位、配置应用程序中的 对象及建立这些对象间的依赖关系。 ApplicationContext作为BeanFa

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,858,933
精华内容 743,573
关键字:

怎么调用接口的实现类