最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java如何獲取接口所有的實現(xiàn)類

 更新時間:2023年01月09日 09:07:24   作者:蒼穹之躍  
這篇文章主要介紹了Java如何獲取接口所有的實現(xiàn)類,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Java獲取接口所有的實現(xiàn)類

最近因業(yè)務(wù)需求,要實現(xiàn)NodeRed服務(wù)后端化,為使各個節(jié)點的解析進行插件化(NodeRed各個節(jié)點也是插件化,安裝插件即可使用) ,后端不得不動態(tài)加載解析NodeRed節(jié)點json,用一個接口來統(tǒng)一管理。

import cn.hutool.core.util.ClassUtil;
import java.util.*;
 
/**
 * 此類用來解析NodeRed服務(wù)器的json串
 */
public class NodeRedParseUtil {
    
    public static void main(String[] args) throws IllegalAccessException, InstantiationException {
        //獲取所有的模型實現(xiàn)類
        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);
            }
        }
    }
 
}

反射獲取接口的所有實現(xiàn)類

添加依賴

implementation 'org.reflections:reflections:0.9.12'

接口

package com.example.myapplication.people;

public interface IPeople {
? String say();
}

實現(xiàn)類

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.*;

/**
?* Example local unit test, which will execute on the development machine (host).
?*
?* @see <a  rel="external nofollow" >Testing documentation</a>
?*/
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();
? ? }
? }
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java并發(fā)編程學習之Unsafe類與LockSupport類源碼詳析

    Java并發(fā)編程學習之Unsafe類與LockSupport類源碼詳析

    這篇文章主要給大家介紹了關(guān)于Java并發(fā)編程學習之Unsafe類與LockSupport類源碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧
    2018-06-06
  • 使用SpringBoot+OkHttp+fastjson實現(xiàn)Github的OAuth第三方登錄

    使用SpringBoot+OkHttp+fastjson實現(xiàn)Github的OAuth第三方登錄

    這篇文章主要介紹了使用SpringBoot+OkHttp+fastjson實現(xiàn)Github的OAuth第三方登錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 詳解Java中方法重寫和方法重載的6個區(qū)別

    詳解Java中方法重寫和方法重載的6個區(qū)別

    方法重寫和方法重載都是面向?qū)ο缶幊讨?,那么方法重寫和方法重載有哪些區(qū)別,本文就詳細的來介紹一下,感興趣的可以了解一下
    2022-01-01
  • SpringBoot 集成 activiti的示例代碼

    SpringBoot 集成 activiti的示例代碼

    這篇文章主要介紹了SpringBoot 集成 activiti的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • SpringBoot項目中使用Jsp的正確方法

    SpringBoot項目中使用Jsp的正確方法

    SpringBoot默認是不支持JSP開發(fā)的,若是需要使用JSP的話便需要自己配置外部的tomcat,下面這篇文章主要給大家介紹了關(guān)于SpringBoot項目中使用Jsp的正確方法,需要的朋友可以參考下
    2023-05-05
  • java字節(jié)碼框架ASM操作字節(jié)碼的方法淺析

    java字節(jié)碼框架ASM操作字節(jié)碼的方法淺析

    這篇文章主要給大家介紹了關(guān)于java字節(jié)碼框架ASM如何操作字節(jié)碼的相關(guān)資料,文中通過示例代碼介紹的很詳細,有需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • spring security環(huán)境搭建

    spring security環(huán)境搭建

    本文通過代碼給大家介紹了spring security環(huán)境搭建的詳細教程,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-09-09
  • jdbc實現(xiàn)圖書館借閱系統(tǒng)

    jdbc實現(xiàn)圖書館借閱系統(tǒng)

    這篇文章主要為大家詳細介紹了jdbc實現(xiàn)圖書館借閱系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • SpringCloud?微服務(wù)數(shù)據(jù)權(quán)限控制的實現(xiàn)

    SpringCloud?微服務(wù)數(shù)據(jù)權(quán)限控制的實現(xiàn)

    這篇文章主要介紹的是權(quán)限控制的數(shù)據(jù)權(quán)限層面,意思是控制可訪問數(shù)據(jù)資源的數(shù)量,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-11-11
  • SpringBoot項目打包為JAR文件的實現(xiàn)

    SpringBoot項目打包為JAR文件的實現(xiàn)

    本文主要介紹了SpringBoot項目打包為JAR文件的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-09-09

最新評論

尤溪县| 京山县| 湄潭县| 福安市| 灵台县| 卓资县| 南开区| 泗阳县| 巨野县| 阜新市| 扬州市| 江陵县| 丰都县| 松滋市| 来宾市| 阳春市| 中山市| 五常市| 平昌县| 英山县| 万安县| 长子县| 临澧县| 承德市| 麦盖提县| 特克斯县| 新竹县| 鄂伦春自治旗| 兰坪| 宁德市| 灵武市| 繁峙县| 丹棱县| 黄冈市| 佳木斯市| 泌阳县| 板桥市| 名山县| 荔波县| 辽源市| 镇康县|