• Java反射(5)获取继承关系


    目录:
    通过Class对象可以获取继承关系:

    • 1.Class getSuperclass():获取父类类型;(单继承)
    • 2.Class[] getInterfaces():获取当前类实现的所有接口;(多实现)
    • 3.通过Class对象的isAssignableFrom()方法,判断Class向上转型是否可以实现。

    1.获取父类类型

    public class Main {
        public static void main(String[] args) throws Exception {
            Class i = Integer.class;
            Class n = i.getSuperclass();
            System.out.println(n);
            Class o = n.getSuperclass();
            System.out.println(o);
            System.out.println(o.getSuperclass());
        }
    }
    

    输出:

    class java.lang.Number 
    class java.lang.Object 
    null 
    

    Integer的父类类型是Number,Number的父类是Object,Object的父类是null。除Object外,其他任何非interface的Class都必定存在一个父类类型。

    2.获取当前类实现的所有接口

    public class Main {
        public static void main(String[] args) throws Exception {
            Class s = Integer.class;
            Class[] is = s.getInterfaces();
            for (Class i : is) {
                System.out.println(i);
            }
        }
    }
    
    

    输出Integer实现的接口有:

    java.lang.Comparable
    java.lang.constant.Constable
    java.lang.constant.ConstantDesc
    

    3.判断Class向上转型

    在非反射调用中,当我们判断一个实例是否是某个类型时,正常情况下,使用instanceof操作符:

    Object n = Integer.valueOf(123);
    boolean isDouble = n instanceof Double; // false
    boolean isInteger = n instanceof Integer; // true
    boolean isNumber = n instanceof Number; // true
    boolean isSerializable = n instanceof java.io.Serializable; // true
    

    如果是两个Class实例,要判断一个向上转型是否成立,可以调用isAssignableFrom():

    // Integer i = ?
    Integer.class.isAssignableFrom(Integer.class); // true,因为Integer可以赋值给Integer
    // Number n = ?
    Number.class.isAssignableFrom(Integer.class); // true,因为Integer可以赋值给Number
    // Object o = ?
    Object.class.isAssignableFrom(Integer.class); // true,因为Integer可以赋值给Object
    // Integer i = ?
    Integer.class.isAssignableFrom(Number.class); // false,因为Number不能赋值给Integer
    

    博客来源:
    https://www.liaoxuefeng.com/wiki/1252599548343744/1264804244564000

  • 相关阅读:
    (转)批量导出存储过程
    (转)ylbtech-cnblogs(博客园)-数据库设计-6.0-Msg(短消息)
    (转)怎样玩转千万级别的数据
    (转)处理上百万条的数据库如何提高处理查询速度
    (转)SQLSERVER表分区的介绍(二)
    (转)SQLSERVER表分区的介绍(一)
    (转)在SQL中取出字符串中数字部分或在SQL中取出字符部分
    (转)SQL按照日、周、月、年统计数据
    构建操作mysql的类
    解决Celery 在Windows中搭建和使用的版本
  • 原文地址:https://www.cnblogs.com/JohnTeslaaa/p/12716964.html
Copyright © 2020-2023  润新知