zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Oracle重建表索引及手工收集统计信息
    VirtualBox虚拟机安装MSDOS和MINIX2.0.0双系统
    odp.net以及oracle oledb安装
    Oralce常用维护命令
    Sales_item
    IBM MQ Reason 2538(MQRC_HOST_NOT_AVAILABLE) 错误原因一例
    Unable to create the store directory. (Exception from HRESULT: 0x80131468)
    WMS函数组:13.WMS入库BAPI
    WMS函数组:12.批量入库物料移动凭证
    WMS函数组:11.交货单取金额
  • 原文地址:https://www.cnblogs.com/JohnTeslaaa/p/12716964.html
Copyright © 2011-2022 走看看