`

java获取子类 转

    博客分类:
  • java
阅读更多

 

获取子类

package com.tools;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class ClassLoaderUtil {
	  
	    public synchronized static void loadClassesFromPath(String specPath) {  
	        if (!isLoad) {  
	            try {
	                URL resource = ClassLoaderUtil.class.getResource(specPath);  
	                URI uri = resource.toURI(); 
	                if(String.valueOf(uri).indexOf("jar!")>0){
	                	resource = ClassLoaderUtil.class.getProtectionDomain().getCodeSource().getLocation();
	                	uri = resource.toURI();
	                }
	                String property = new File(uri).getPath();
	                String[] paths = property.split(";");  
	                for (String path : paths) {  
	                    File file = new File(path);  
	                    if (file.isFile() && path.endsWith(".jar")) {  
	                        listClassesInZip(file,specPath);  
	                    } else if (file.isDirectory()) {  
	                        listClassesInDirectory(path.substring(0,path.length()-specPath.length()) + File.separatorChar, file);  
	                    }  
	                }  
	            } catch (URISyntaxException e) {  
//	                JOptionPane.showMessageDialog(null, ExceptionUtil.getExceptionMessage(e));  
	            }  
	        }  
	    }  
	  
	    private synchronized static void listClassesInDirectory(String rootPath, File file) {  
	        File[] subFiles = file.listFiles();  
	        for (File subFile : subFiles) {  
	            if (subFile.canRead()) {  
	                if (subFile.isFile()) {  
	                    String path = subFile.getPath();  
	                    if (path.endsWith(".class")) {  
	                        try {  
	                            String className = getClassName(path.substring(rootPath.length()));  
	                            CLASSES.add(Class.forName(className));  
	                        } catch (Throwable e) {  
	                        }  
	                    } else if (path.endsWith(".jar")) {  
	                        listClassesInZip(subFile,"/");  
	                    }  
	                } else if (subFile.isDirectory()) {  
	                    listClassesInDirectory(rootPath, subFile);  
	                }  
	            }  
	        }  
	    }  
	  
	    private synchronized static void listClassesInZip(File jarFile,String specPath) {  
	        ZipInputStream in = null;  
	        try {  
	            in = new ZipInputStream(new FileInputStream(jarFile));  
	            ZipEntry ze = null;  
	            while ((ze = in.getNextEntry()) != null) {  
	                if (ze.isDirectory()) {  
	                    continue;  
	                } else {  
	                    try {  
	                        String name = ze.getName();  
	                        if (!name.endsWith(".class"))  
	                            continue;  
	                        if(specPath.substring(1).length()>0 && name.indexOf(specPath.substring(1))<0)
	                        	continue;
	                        String className = getClassName(name);
	                        CLASSES.add(Class.forName(className));  
	                    } catch (Throwable e) {  
	                    }  
	                }  
	            }  
	        } catch (Throwable e) {  
	        } finally {  
	            if (in != null) {  
	                try {  
	                    in.close();  
	                } catch (IOException e) {  
	                }  
	            }  
	        }  
	    }  
	  
	    private static String getClassName(String path) {  
	        return path.replace('/', '.').replace('\\', '.').replaceAll(".class", "");  
	    }  
	  
	    public static List<Class<?>> getSubClasses(Class<?> clazz) {  
	        List<Class<?>> subClasses = SUB_CLASSES_MAP.get(clazz);  
	        if (subClasses == null) {  
	            subClasses = new ArrayList<Class<?>>(10);  
	            for (Class<?> tmpClass : CLASSES) {  
	                if (clazz.isAssignableFrom(tmpClass) && !tmpClass.isAssignableFrom(clazz)) {  
	                    subClasses.add(tmpClass);  
	                }  
	            }  
	            SUB_CLASSES_MAP.put(clazz, subClasses);  
	        }  
	        return Collections.unmodifiableList(subClasses);  
	    }  
	  
	    public static final List<Class<?>> CLASSES = new ArrayList<Class<?>>(200);  
	  
	    private static final Map<Class<?>, List<Class<?>>> SUB_CLASSES_MAP = new HashMap<Class<?>, List<Class<?>>>();  
	  
	    private static boolean isLoad;  
	  
	    
	}  

 

分享到:
评论

相关推荐

    在父类获取子类属性

    在Java编程语言中,"在父类获取子类属性"是一个常见的需求,特别是在设计模式、继承和多态性等核心概念的应用中。这个主题涉及到面向对象编程的基本原理,特别是子类继承父类后如何访问和操作子类特有的属性。下面...

    java反射获取所有属性,获取所有get方法,包括子类父类

    总结,Java反射机制为我们提供了强大的动态性,能够方便地获取和操作类的属性和方法,包括私有成员和子类父类中的成员。通过熟练掌握反射技术,开发者可以实现更灵活、更动态的代码,但也需要谨慎使用,以避免潜在的...

    JAVA获取同一路径下所有子类或接口实现类

    在Java编程中,有时我们需要获取特定路径下所有实现了某个接口或者继承了某个类的子类。这个场景在大型项目中尤为常见,例如进行组件扫描、依赖注入或是单元测试时。在给定的代码示例中,它展示了如何通过Java来实现...

    java中获取泛型类的子类

    通过反射获得指定类的父类的泛型参数的实际类型

    java判断class子类或父类的实例方法

    在本篇文章中,我们学习了如何使用 Java 中的反射机制来判断类的继承关系,包括判断一个类是否为基本数据类型、判断一个类是否为另一个类的子类或父类,以及如何获取泛型类型实例。这些技术在日常开发中非常实用,...

    java获取某一时间

    根据给定文件的信息,本文将深入探讨 Java 中与时间处理相关的知识,重点在于获取特定日期的方法及其实现细节。文章将覆盖如下知识点: 1. **Java 时间类的基础介绍** 2. **日期格式化与解析** 3. **获取当前日期、...

    JAVA 子类继承父类的范例 可直接运行

    如果需要在子类中访问父类的私有成员,则需要在父类中提供公共或受保护的方法来获取这些值。子类通过重写父类的方法,可以提供特定于子类的行为,也可以使用`super`关键字调用父类的版本。 关于继承的更多细节,...

    java 获取USB外接设备信息demo

    以下是对如何使用Java获取USB设备信息的详细解释。 首先,我们需要了解USB设备的一些基本概念。USB设备通常由Vendor ID (VID) 和 Product ID (PID) 来唯一标识。VID是由USB组织分配给设备制造商的,而PID则是制造商...

    java子类继承父类实例-披萨的选择实现代码

    在本篇文章中,我们使用了Java输入输出的应用,通过Scanner类来获取用户的输入信息,以便实现比萨制作的选择。 六、Java类的设计 在本篇文章中,我们使用了Java类的设计,定义了不同的类来实现不同的逻辑。例如,...

    通过 Java 获取音频的波形图

    综上所述,实现“通过Java获取音频的波形图”涉及到音频输入输出、声道处理、波形图生成、Swing GUI设计、数据可视化以及可能的音频分析等多个技术层面,需要综合运用Java Sound API、Swing组件以及数据处理和图形...

    java 获取当前时间

    可以使用其子类或者使用静态工厂方法`DateFormat.getDateInstance()`、`DateFormat.getTimeInstance()`、`DateFormat.getDateTimeInstance()`等来获取相应的`DateFormat`实例。 - 这些工厂方法可以根据不同的参数...

    递归拿到所有子类的id

    List list2 = new ArrayList(); public List getAll(String i,List&lt;Student&gt; list){ Iterator iter = list.iterator(); while(iter.hasNext()){ Student student = (Student)iter.next();...

    JAVA反射机制的入门代码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...

    java gif动画转png

    4. **合并PNG帧**:如果需要将所有PNG帧合成为一张静态图片,可以使用`BufferedImage`的`Graphics2D`子类来绘制每一帧,最后保存为单个PNG。 ```java BufferedImage combinedImage = new BufferedImage(width, ...

    Java源代码根据URL获取因特网网页源文件.rar

    这个RAR文件包含的"说明.txt"可能是详细的操作指南,而"根据URL获取因特网网页源文件"可能是一个Java源代码示例,用于演示如何实现这一功能。以下是对这个主题的详细讲解: 1. **网络编程基础**: 在Java中,进行...

    java.util.Date与java.sql.Date相互转换

    从继承关系上来看,`java.sql.Date` 是从 `java.util.Date` 继承而来,这意味着 `java.sql.Date` 实际上就是 `java.util.Date` 的一个子类。这种设计使得 `java.sql.Date` 自然地拥有 `java.util.Date` 的所有特性,...

    JAVA_API1.6文档(中文)

    java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据。 java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供...

    Java开发技术大全(500个源代码).

    deriveClass.java 子类访问父类变量示例 getLinePara.java 获取命令行参数示例 hasStaticMethod.java 静态成员方法示例 hasStatMember.java 静态成员变量示例 HelloNative.c 用C写的一个小程序 HelloNative....

    Java中自动类型转换共3页.pdf.zip

    以上是对Java中自动类型转换的简要概述,更深入的理解和应用需要通过实际编程实践和阅读提供的“Java中自动类型转换共3页.pdf”文档来获取。该文档可能会涵盖更多的细节,如转换的具体语法、异常处理、以及何时需要...

    java日期处理小结

    总的来说,Java中的日期处理涉及对`Date`和`Calendar`对象的操作,它们提供了丰富的功能,如获取、设置日期和时间字段,以及比较和格式化日期。在实际编程中,理解并熟练运用这些类和方法对于处理日期相关的逻辑至关...

Global site tag (gtag.js) - Google Analytics