Java中怎样获取一个类的所有子类?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中怎样获取一个类的所有子类?相关的知识,希望对你有一定的参考价值。

有一个抽象类 AbstractTree,它有两个抽象的子类AbstractTreeNode和AbstractTreeLeaf,通过AbstractTree,怎样获取它的两个子类的类对象?

1、面向对象思想的继承是子类继承父类,父类被其它子类继承在JAVA虚拟机的容器中并没有直接接口获取;

2、如果是在一个项目内获取父类的子类继承情况,参考这个代码:

package find;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import find.test.Intf;
import find.test.Man;

public class ClassUtil 
public static void main(String[] args) 
try 
System.out.println("接口实现类:");
for (Class<?> c : getAllAssignedClass(Intf.class)) 
System.out.println(c.getName());

System.out.println("子类:");
for (Class<?> c : getAllAssignedClass(Man.class)) 
System.out.println(c.getName());

 catch (ClassNotFoundException e) 
// TODO Auto-generated catch block
e.printStackTrace();
 catch (IOException e) 
// TODO Auto-generated catch block
e.printStackTrace();



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

* @param intf
* @return
* @throws IOException
* @throws ClassNotFoundException
*/
public static List<Class<?>> getAllAssignedClass(Class<?> cls) throws IOException,
ClassNotFoundException 
List<Class<?>> classes = new ArrayList<Class<?>>();
for (Class<?> c : getClasses(cls)) 
if (cls.isAssignableFrom(c) && !cls.equals(c)) 
classes.add(c);


return classes;


/**
* 取得当前类路径下的所有类

* @param cls
* @return
* @throws IOException
* @throws ClassNotFoundException
*/
public static List<Class<?>> getClasses(Class<?> cls) throws IOException,
ClassNotFoundException 
String pk = cls.getPackage().getName();
String path = pk.replace('.', '/');
ClassLoader classloader = Thread.currentThread().getContextClassLoader();
URL url = classloader.getResource(path);
return getClasses(new File(url.getFile()), pk);


/**
* 迭代查找类

* @param dir
* @param pk
* @return
* @throws ClassNotFoundException
*/
private static List<Class<?>> getClasses(File dir, String pk) throws ClassNotFoundException 
List<Class<?>> classes = new ArrayList<Class<?>>();
if (!dir.exists()) 
return classes;

for (File f : dir.listFiles()) 
if (f.isDirectory()) 
classes.addAll(getClasses(f, pk + "." + f.getName()));

String name = f.getName();
if (name.endsWith(".class")) 
classes.add(Class.forName(pk + "." + name.substring(0, name.length() - 6)));


return classes;

参考技术A 据我所知无法获取,但可以用instanceof来判断一个类是否是另一个类的子类。

以上是关于Java中怎样获取一个类的所有子类?的主要内容,如果未能解决你的问题,请参考以下文章

IOS 获取父类的所有子类

第三次发了,反射如何获取子类属性的值

java怎么获取某个父类(或接口)的所有子类

java 类的继承,子类变量的获取

继承一个类,然后返回获取子类中的所有方法并且不包含父类的

sql 查询:无限极分类,获取父类下所有子类