基于反射的推理:通过类名就能获取类的祖宗十八代?

反射:获取类结构信息【Class、Package】

听说通过Class类反射,只要一个完全的类名就能够推理出类的所有信息?这不像极了电视里的推理剧?那这次我就来通过类的名字来查到该类的父类【也就是它爸爸,其实连它祖宗都能找到】,该类的包名【也就是它的家】,以及该类实现的接口【也就是它能做的事】。

先创建以下类:

苹果是一种能生长的水果

苹果是种水果

苹果能生长

所以苹果为水果的子类,实现生长的接口

Fruit

package javabase.entity;
public class Fruit {
    
}

Grow

package javabase.service;
public interface Grow {
    
}

Apple

package javabase.entity;
import javabase.service.Grow;
public class Apple extends Fruit implements Grow {
    
}

Main

package javabase;

public class Main {
    public static void main(String[] args) throws Exception{
        //这里获取Apple的Class实例化对象,需要Apple的全名【包.类名】
        Class apple = Class.forName("javabase.entity.Apple");
        
        //获取对应的包名
        Package pack = apple.getPackage();
        System.out.print("=====这是Apple所属的包====>");
        System.out.println(pack.getName());
        
        //一个类只能继承一个父类,所以只有一个
        Class fruit = apple.getSuperclass();
        System.out.print("=====这个是Apple的爸爸====>");
        System.out.println(fruit.getName());
        
        //一个类可以实现多个接口,所以是一个数组
        System.out.print("=====这是Apple能做的事====>");
        Class[] canDo = apple.getInterfaces();
        for (int i=0; i<canDo.length; i++){
            System.out.print(canDo[i].getName()+" ");
        }
    }
}

运行结果

=====这是Apple所属的包====>javabase.entity
=====这个是Apple的爸爸====>javabase.entity.Fruit
=====这是Apple能做的事====>javabase.service.Grow

苹果还能晒太阳呢!加多个SunBathe的接口

SunBathe

package javabase.service;
public interface SunBathe {
    
}

Apple

package javabase.entity;
import javabase.service.Grow;
import javabase.service.SunBathe;
public class Apple extends Fruit implements Grow,SunBathe {

}

再运行刚刚的Main,我们就能发现有多一个接口出现

运行结果

=====这是Apple所属的包====>javabase.entity
=====这个是Apple的爸爸====>javabase.entity.Fruit
=====这是Apple能做的事====>javabase.service.Grow javabase.service.SunBathe 

当然,还有一个getSimpleName()的方法用于获取类的简单名,如javabase.entity.Fruit就是Fruit,还能通过该类的父类再查找该类的父类,也就是说,只要提供一个类的全名给Class,它就能帮你把该类的祖宗十八代都找出来,想想,还是有点兴奋的呢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值