java父类如何获得所有子类的名称

java父类如何获得所有子类的名称,第1张

java中子类可以获取父类,是因为java语言规范强制要求所有非object类必须有父类,类在编译的时候,父类唯一确定,编译器会将父类的引用记录在class文件里面。

反过来,编译器不会给你记录子类,想要获取,只能自己根据情况实现。比如在加载一个类的时候添加判断,或者强制要求这些类满足特定的条件,通过这个条件去获取类的名称

public static Object getType(Class c) throws Exception{

    Field f = cgetDeclaredField("TYPE");

    Object obj = fget(c);

    return obj;

}

public static void main(String[] args) throws Exception {

    Systemoutprintln(getType(Integerclass));

}

在JAVA中动态执行类的静态方法

/

在JAVA中,通过ClassforName()方法可以动态决定加载哪一个类,这个功能对于相同接口的不同实现来讲非常有用。比如对于设计好的数据库连接池接口,我们可以有多种的接口实现类来完成相同的功能,同时用户可以简单的通过修改配置文件来指定实际使用哪一个实现类,在源代码里面通过读取配置文件信息,并用ClassforName(configClassName)getInstance()就可以构造一个特定的实现类实例,而不用每次修改源代码。这样对于程序来讲只用关心接口的定义,用户只用进行配置文件的设置就完成了同一功能的不同实现的切换。

但是如果实现类需要通过静态方法来进行初始化的时候,动态加载的过程就会复杂一些。同样的以数据库连接池为例,通常连接池的构造函数都会被定义为私有的,而通过自定义的getInstance()静态方法来得到唯一实例。这种情况下简单的通过ClassforName()getInstance()就无法正确构造实例。

幸好JAVA所提供的反射机制(Reflection)为我们提供了完整了探悉类内部结构的方法。通过反射机制,我们能够完成基本上所有的运行时决定的动作(虽然这一实现要比其他动态语言,比如PHP,的eval()的使用要复杂的多)。

下面通过实际的例子说明如何在运行时动态访问类的静态方法。

以上就是关于java父类如何获得所有子类的名称全部的内容,包括:java父类如何获得所有子类的名称、java 如何获取基本类的class、Java静态方法获取所属类的信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9384368.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存