获取类的子类

原理:

1、扫描指定路劲下的JAVA文件

2、利用反射

package com.util;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Objects;
import java.util.stream.Stream;

/**
 * 功能描述:扫描工具类
 * 作者:唐泽齐
 */
public class ScanUtil {

    public static extends Object> void scanList(String scan, Class clazz, List list) throws Throwable {
        Stream walk = Files.walk(Paths.get(scan));
        walk
                .filter(Files::isRegularFile)
                .map(path ->
                        path.toString().replaceAll(new String("\\\\"), ".").replaceAll("src.", "")
                )
                .filter(p -> p.endsWith(".java")).map(p ->
                {
                    try {
                        return Class.forName(p.replaceAll(".java", ""));
                    } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                        return null;
                    }
                }
        )
                .filter(Objects::nonNull)
                .filter(p -> clazz.isAssignableFrom(p))
                .map(p -> {
                    try {
                        return p.newInstance();
                    } catch (InstantiationException e) {
                        e.printStackTrace();
                        return null;
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                        return null;
                    }
                }).filter(Objects::nonNull)
                .forEach(p -> {
                    list.add((T) p);
                });
    }
}

Original: https://www.cnblogs.com/tangzeqi/p/16474893.html
Author: instr
Title: 获取类的子类

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/574711/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • spring 拦截器流程 HandlerInterceptor AsyncHandlerInterceptor HandlerInterceptorAdapter

    HandlerInterceptor源码 3种方法: preHandle:拦截于请求刚进入时,进行判断,需要boolean返回值,如果返回true将继续执行,如果返回false,将…

    Java 2023年6月5日
    0137
  • 程序员都在用的 IDEA 插件(不断更新)

    程序员都在用的 IDEA 插件(不断更新) 程序员都在用的 IDEA 插件(不断更新) 插件集合 CamelCase Translation LiveEdit MarkDown N…

    Java 2023年6月5日
    080
  • 使用 Proxychains 代理联网

    前言 Proxychains 是 Linux 系统中一款简单好用的代理工具,可以指定特定命令走代理进行网络请求,适用于比较特殊的网络环境。最新版本为 proxychains4 安装…

    Java 2023年6月7日
    088
  • 图解 Apache SkyWalking UI 的使用

    Apache SkyWalking的UI界面主要分为以下几个区域: 功能选择区:这里列出了主要的UI功能,包括仪表盘、拓扑图、追踪、性能刨析、告警等功能 重新加载区:控制重新加载机…

    Java 2023年6月7日
    089
  • 面试突击71:GET 和 POST 有什么区别?

    GET 和 POST 是 HTTP 请求中最常用的两种请求方法,在日常开发的 RESTful 接口中,都能看到它们的身影。而它们之间的区别,也是一道常见且经典的面试题,所以我们本文…

    Java 2023年5月29日
    068
  • Spring IOC 理解

    参考博文:https://www.cnblogs.com/xdp-gacl/p/4249939.html Original: https://www.cnblogs.com/xll…

    Java 2023年6月13日
    079
  • 【STM32F4】【银杏科技ARM+FPGA】iCore3移植RT-Thread–内核之线程的创建

    RT-Thread系统中线程是调度的最小单位,后面的内核讲解都是以线程为单位展开的,线程的本质就是我们平时跑的裸机函数,但是它添加了实时性的元素,可以函数级的抢占,但不存在中断嵌套…

    Java 2023年5月29日
    067
  • 强软弱虚引用,只有体会过了,才能记住

    以前学习强软弱虚引用的时候,只是走马观花看看博客,并没有自己写代码去实践、去证明,导致每次看完后,过不了多久就忘了,后来下定决心,一定要自己敲敲代码,这样才能让印象更加深刻,古人云…

    Java 2023年6月5日
    071
  • 项目准备

    项目导入 资料连接: https://pan.baidu.com/s/1Xp97dflG_i1a8DyTKJWAjg提取码:java 选择项目的pom.xml文件导入 项目启动 第…

    Java 2023年6月6日
    087
  • Java基础之 注释、标识符、关键字

    在代码量比较多,项目结构复杂起来,我们就需要用到注释。 注释不会被执行,是给写代码的人看的 书写注释是一个非常好的习惯 在Java中的注释有三种: 单行注释 多行注释 文档注释 示…

    Java 2023年6月8日
    073
  • spring框架 技术方面

    一:依赖注入的两种方式1.set注入2.构造器注入 二:web应用开发中,如何启用spring框架支持,写出关键配置在webApp中获得XMLWebApplicationConte…

    Java 2023年6月5日
    091
  • 格式化的输出

    可以使用 System.out.print(s)将数值输出到控制台中; Java SE 5.0沿用了C语言库函数中的printf方法,例如: System.out.printf(“…

    Java 2023年6月9日
    075
  • JVM的类加载过程

    如果可以,请让我们慢慢了解,慢慢喜欢。 The frog in the well knows nothing of the great ocean. 井底之蛙,不知大海。 JVM …

    Java 2023年6月9日
    084
  • 如何给注册中心锦上添花?

    hello,大家好,我是小楼。 在上一篇文章《如何组装一个注册中心》中,我们看到了如何利用一些现有的技术方案来组装出一个生产可用的注册中心最小集。 有的同学看完表示学到了,也有同学…

    Java 2023年6月6日
    086
  • 程序员坐牢了,会被安排去写代码吗?

    点击蓝色”程序员黄小斜”关注我哟 加个”星标”,每天和你一起多进步一点点! 今天给大家分享一篇有意思的爽文,但也是根据多年之前一个真…

    Java 2023年6月8日
    067
  • 哈工大软件构造Lab1(2022)

    目录 一、实验目标概述 二、实验环境配置 1、安装编写java程序的IDE——IntelliJ IDEA 2、安装Git 3、安装Junit 4、GitHub Lab1仓库的URL…

    Java 2023年6月9日
    096
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球