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

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

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

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

最近因業(yè)務(wù)需求,要實(shí)現(xiàn)NodeRed服務(wù)后端化,為使各個(gè)節(jié)點(diǎn)的解析進(jìn)行插件化(NodeRed各個(gè)節(jié)點(diǎn)也是插件化,安裝插件即可使用) ,后端不得不動(dòng)態(tài)加載解析NodeRed節(jié)點(diǎn)json,用一個(gè)接口來統(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 {
        //獲取所有的模型實(shí)現(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) {
            //實(shí)例化
            Object o = aClass.newInstance();
            System.out.println();
            if (o instanceof NodeRedModel) {
                NodeRedModel nodeRedModel = (NodeRedModel) o;
                map.put(nodeRedModel.getType(), nodeRedModel);
            }
        }
    }
 
}

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

添加依賴

implementation 'org.reflections:reflections:0.9.12'

接口

package com.example.myapplication.people;

public interface IPeople {
? String say();
}

實(shí)現(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é)

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

相關(guān)文章

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

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

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

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

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

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

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

    SpringBoot 集成 activiti的示例代碼

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

    SpringBoot項(xiàng)目中使用Jsp的正確方法

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

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

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

    spring security環(huán)境搭建

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

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

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

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

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

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

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

最新評(píng)論

婺源县| 开江县| 博湖县| 西峡县| 阜康市| 台中市| 呈贡县| 桑日县| 合作市| 定远县| 台安县| 全椒县| 繁昌县| 永安市| 曲松县| 崇州市| 丽江市| 米泉市| 浦东新区| 湖州市| 囊谦县| 安西县| 凤山市| 澄城县| 盐边县| 仁化县| 普兰店市| 望都县| 扬中市| 堆龙德庆县| 清丰县| 平遥县| 景泰县| 哈尔滨市| 涿州市| 留坝县| 通山县| 九龙县| 元谋县| 房山区| 朝阳区|