欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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;
? }
}

測(cè)試類

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)文章

最新評(píng)論