• Java对象类型的判断


    instanceof

    判断某个对象是否是某个类的实例或者某个类的子类的实例。它的判断方式大概是这样的:

        public<T> boolean function(Object obj, Class<T> calzz) {
            if (obj == null) {
                return false;
            }
            try {
                T t = (T) obj;
                return true;
            } catch (ClassCastException e) {
                return false;
            }
        }

    Class.equals()

    这种方式比较的类型,一定是本身才返回true,子类或者父类都返回false;

            // B是A的子类,C是B的子类
            B b = new B();
            // false
            System.out.println(b.getClass().equals(A.class));
            // true
            System.out.println(b.getClass().equals(B.class));
            // false
            System.out.println(b.getClass().equals(C.class));

    PS:b.getClass().equals(A.class)等同于b.getClass() == A.class

    Class.isInstance()

    这个方法跟instanceof完全等价。

            // B是A的子类,C是B的子类
            B b = new B();
            // true
            System.out.println(A.class.isInstance(b));
            // true
            System.out.println(B.class.isInstance(b));
            // false
            System.out.println(C.class.isInstance(b));

    Class.isAssignableFrom

    判断某个类是否是另一个类和其子类。

            // B是A的子类,C是B的子类
            // false
            System.out.println(B.class.isAssignableFrom(A.class));
            // true 
            System.out.println(B.class.isAssignableFrom(B.class));
            // true
            System.out.println(B.class.isAssignableFrom(C.class));
  • 相关阅读:
    泛型接口协变和抗变
    泛型类功能
    泛型结构
    using 关键字给类和名称空间指定别名
    sqlite创建数据库问题
    sqlite命令
    必须输入大于0的整数
    最近在看c#本质论和B站上对应这本书的视频
    Linux系统管理笔记
    创建圆形类,其中包括set,get方法
  • 原文地址:https://www.cnblogs.com/zeling/p/8494835.html
Copyright © 2020-2023  润新知