我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java如何获取接口所有的实现类

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java如何获取接口所有的实现类

Java获取接口所有的实现类

最近因业务需求,要实现NodeRed服务后端化,为使各个节点的解析进行插件化(NodeRed各个节点也是插件化,安装插件即可使用) ,后端不得不动态加载解析NodeRed节点json,用一个接口来统一管理。

import cn.hutool.core.util.ClassUtil;
import java.util.*;
 

public class NodeRedParseUtil {
    
    public static void main(String[] args) throws IllegalAccessException, InstantiationException {
        //获取所有的模型实现类
        Set<Class<?>> classes = ClassUtil.scanPackageBySuper("com.ciih.nodred.plugins", NodeRedModel.class);
        Map<String, NodeRedModel> map = new HashMap<>(classes.size());
        for (Class<?> aClass : classes) {
            //实例化
            Object o = aClass.newInstance();
            System.out.println();
            if (o instanceof NodeRedModel) {
                NodeRedModel nodeRedModel = (NodeRedModel) o;
                map.put(nodeRedModel.getType(), nodeRedModel);
            }
        }
    }
 
}

反射获取接口的所有实现类

添加依赖

implementation 'org.reflections:reflections:0.9.12'

接口

package com.example.myapplication.people;

public interface IPeople {
  String say();
}

实现类

package com.example.myapplication.people;

public class Student implements IPeople{

  @Override
  public String say() {
    return "I am a student";
  }
}
package com.example.myapplication.people;

public class Teacher implements IPeople{

  @Override
  public String say() {
    return "I am a teacher";
  }
}

工具类

package com.example.myapplication;

import android.net.IpPrefix;
import com.example.myapplication.people.IPeople;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.reflections.Reflections;

public class Utils {
  public static Map<String,Class> getAllIPeopleImpl(){
    Reflections reflection=new Reflections("com.example.myapplication.people");
    Map<String,Class> map=new HashMap<>();
    Set<Class<? extends IPeople>> set=reflection.getSubTypesOf(IPeople.class);
    for(Class c:set){
      map.put(c.getSimpleName(),c);
    }
    return map;
  }
}

测试类

package com.example.myapplication;

import com.example.myapplication.people.IPeople;
import java.util.Map;
import org.junit.Test;

import static org.junit.Assert.*;


public class ExampleUnitTest {
  
  @Test
  public void test() {
    Map<String, Class> map = Utils.getAllIPeopleImpl();
    try {
      for (String str : map.keySet()) {
        Object people = map.get(str).newInstance();
        if(people instanceof IPeople){
          System.out.println(str);
          System.out.println(((IPeople) people).say());
        }
      }
    } catch (IllegalAccessException | InstantiationException e) {
      e.printStackTrace();
    }
  }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java如何获取接口所有的实现类

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java如何获取接口所有的实现类

这篇文章主要介绍了Java如何获取接口所有的实现类,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-09

Java如何实现获取内网的所有IP地址

本篇内容主要讲解“Java如何实现获取内网的所有IP地址”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java如何实现获取内网的所有IP地址”吧!题目描述在进行网络编程时,有时需要对局域网的所有
2023-07-02

java如何获取redis所有key

本文讲解Java中获取Redis所有key的方法。方法1:获取所有key并打印JDBC客户端库可以连接Redis并获取所有key。方法2:获取所有key并返回Set获取所有key并返回一个Set集合。方法3:匹配模式获取key使用通配符匹配key模式,例如"user*”。方法4:使用CURSOR游标获取所有key当Redis中key数量过多时,使用CURSOR游标机制分批获取key。注意事项:获取所有key耗时,实际应用中应避免频繁使用。当Redis中key数量过多时,建议使用CURSOR游标机制。Jed
java如何获取redis所有key
2024-04-02

java怎么获取实体类所有属性

在Java中,可以使用反射机制来获取实体类的所有属性。下面是一种常见的方法:1. 使用`Class`类的`getDeclaredFields()`方法获取实体类的所有属性。该方法返回一个`Field`数组,包含了实体类中所有声明的字段(包括
2023-09-20

java如何获取list所有值

在Java中,可以使用for循环遍历List来获取所有值。具体步骤如下:1. 定义一个List对象,例如:```javaList list = new ArrayList();```2. 向List中添加元素,例如:```javalist.
2023-09-20

java中如何获取map的所有键

在Java中,可以使用`keySet()`方法获取Map的所有键。该方法返回一个Set集合,其中包含Map中所有的键。以下是一个示例代码,展示如何获取Map的所有键:```javaimport java.util.HashMap;impor
2023-08-31

如何使用spring动态获取接口的不同实现类

这篇“如何使用spring动态获取接口的不同实现类”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何使用spring动态获取
2023-06-29

idea怎么查看接口的所有实现类

要查看一个接口的所有实现类,可以使用以下方法:1. 使用开发工具的查找功能:在开发工具的工程中,可以使用查找功能来搜索实现了该接口的所有类文件。例如,在Eclipse中可以使用“Open Type”(快捷键为Ctrl+Shift+T)来搜索
2023-08-20

java如何创建接口实现类

在 Java 中,可以使用 `implements` 关键字来创建接口的实现类。具体步骤如下:1. 定义一个接口,在接口中声明需要实现的方法。```javapublic interface MyInterface {void myMetho
2023-08-24

列出在 Go 中实现接口的所有类型

一分耕耘,一分收获!既然打开了这篇文章《列出在 Go 中实现接口的所有类型》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!问
列出在 Go 中实现接口的所有类型
2024-04-04

java如何获取数据库所有表名

要获取数据库中的所有表名,可以使用如下的Java代码:```javaimport java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.DriverMana
2023-09-27

如何使用JAVA接口实现多实现类

这篇文章主要介绍了如何使用JAVA接口实现多实现类,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。class NoteBook { // 笔记本开启运行功能 pub
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录