获取子类
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反射机制为我们提供了强大的动态性,能够方便地获取和操作类的属性和方法,包括私有成员和子类父类中的成员。通过熟练掌握反射技术,开发者可以实现更灵活、更动态的代码,但也需要谨慎使用,以避免潜在的...
在Java编程中,有时我们需要获取特定路径下所有实现了某个接口或者继承了某个类的子类。这个场景在大型项目中尤为常见,例如进行组件扫描、依赖注入或是单元测试时。在给定的代码示例中,它展示了如何通过Java来实现...
通过反射获得指定类的父类的泛型参数的实际类型
在本篇文章中,我们学习了如何使用 Java 中的反射机制来判断类的继承关系,包括判断一个类是否为基本数据类型、判断一个类是否为另一个类的子类或父类,以及如何获取泛型类型实例。这些技术在日常开发中非常实用,...
以下是对如何使用Java获取USB设备信息的详细解释。 首先,我们需要了解USB设备的一些基本概念。USB设备通常由Vendor ID (VID) 和 Product ID (PID) 来唯一标识。VID是由USB组织分配给设备制造商的,而PID则是制造商...
根据给定文件的信息,本文将深入探讨 Java 中与时间处理相关的知识,重点在于获取特定日期的方法及其实现细节。文章将覆盖如下知识点: 1. **Java 时间类的基础介绍** 2. **日期格式化与解析** 3. **获取当前日期、...
如果需要在子类中访问父类的私有成员,则需要在父类中提供公共或受保护的方法来获取这些值。子类通过重写父类的方法,可以提供特定于子类的行为,也可以使用`super`关键字调用父类的版本。 关于继承的更多细节,...
首先,`SimpleDateFormat`类是`java.text.Format`类的子类,用于格式化和解析日期。它提供了一种灵活的方式来创建自定义的日期和时间模式,以便在字符串和日期对象之间进行转换。 一、创建`SimpleDateFormat`对象 ...
在本篇文章中,我们使用了Java输入输出的应用,通过Scanner类来获取用户的输入信息,以便实现比萨制作的选择。 六、Java类的设计 在本篇文章中,我们使用了Java类的设计,定义了不同的类来实现不同的逻辑。例如,...
综上所述,实现“通过Java获取音频的波形图”涉及到音频输入输出、声道处理、波形图生成、Swing GUI设计、数据可视化以及可能的音频分析等多个技术层面,需要综合运用Java Sound API、Swing组件以及数据处理和图形...
List list2 = new ArrayList(); public List getAll(String i,List<Student> list){ Iterator iter = list.iterator(); while(iter.hasNext()){ Student student = (Student)iter.next();...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...
`Graphics2D`是`Graphics`类的一个子类,提供了更多的图形绘制功能,包括高级渲染和变换。我们可以获取`BufferedImage`的`Graphics2D`上下文,然后应用`AffineTransform`来旋转图像。 5. **旋转步骤** - 加载图片...
4. **合并PNG帧**:如果需要将所有PNG帧合成为一张静态图片,可以使用`BufferedImage`的`Graphics2D`子类来绘制每一帧,最后保存为单个PNG。 ```java BufferedImage combinedImage = new BufferedImage(width, ...
这个RAR文件包含的"说明.txt"可能是详细的操作指南,而"根据URL获取因特网网页源文件"可能是一个Java源代码示例,用于演示如何实现这一功能。以下是对这个主题的详细讲解: 1. **网络编程基础**: 在Java中,进行...
从继承关系上来看,`java.sql.Date` 是从 `java.util.Date` 继承而来,这意味着 `java.sql.Date` 实际上就是 `java.util.Date` 的一个子类。这种设计使得 `java.sql.Date` 自然地拥有 `java.util.Date` 的所有特性,...
java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据。 java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供...
deriveClass.java 子类访问父类变量示例 getLinePara.java 获取命令行参数示例 hasStaticMethod.java 静态成员方法示例 hasStatMember.java 静态成员变量示例 HelloNative.c 用C写的一个小程序 HelloNative....
总的来说,Java中的日期处理涉及对`Date`和`Calendar`对象的操作,它们提供了丰富的功能,如获取、设置日期和时间字段,以及比较和格式化日期。在实际编程中,理解并熟练运用这些类和方法对于处理日期相关的逻辑至关...