获得一个类实例的Class对象的三种方法,与Class对象的相互比较

HarmonyOS 实战开发 —— 基于class-transformer的对象JSON相互转换 使用三方库class-transformer搭配JSON的JSON.parse,可以满足类似gson/fastjson绝大部分的需求,更多用法可以参考 https://github.com/typestack/class-transformer 文档。此外,建议审视设计的类和json是否合理,尽量避免使用复杂的转换。 阅读详情

/*
*获得一个类实例的Class对象有三种常用方法
*1、调用从Object类中继承来的方法public Class getClass()
*以下两种方法是获得某个指定类的Class对象(如果知道类实例的确切类型)
*2、利用Class类的static方法forName(String className(需要带包名)),注意这个方法throws ClassNotFoundException
*3、利用类字面常量,类名.class,也会返回一个指定类的Class对象,它在编译时进行检查,不抛出任何异常

*进行类型比较的两类方法
*(一)比较某对象是否为指定类或其子类的对象
*假设对象x为class X的一个实例(X extends SuperX)
*1、利用instanceof关键字:x instanceof X == true  x instanceof SuperX == true
*2、先利用上述三种方法之一获得Class对象的引用,再调用Class类的方法public boolean isInstance(Object o):
*   x.getClass().isInstance(x)这是一句废话,呵呵。  X/SuperX.class.isInstance(x) == true  Class.forName("X/SuperX").isInstance(x) == true
*(二)比较某对象是否为指定类的对象(不包括其基类)
*先利用上述三种方法之一获得Class对象的引用,再调用Class类的equals()方法(重写了Object类的equals()方法)或利用==比较符
*/

//GetAndCompareClass.java
//Show three menthod to get a Class object and whether an object is a object of the specific class

package com.msn.spaces.bryantd001;

class SuperX{}

class X extends SuperX{}

public class GetAndCompareClass{
      public static Class getForName(String className){
            try{
                  return Class.forName(className);
            }catch(ClassNotFoundException e){
                  System.out.println("The class "+className +" cannot be found!!");
                  return null;
            }
      }

      public static void main(String[] args){
            SuperX x = new X();
            System.out.println("Three method to get the x'Class object:");
            System.out.println("The x is a object of "+x.getClass()+" class.");
            System.out.println("The x is a object of "+X.class+" class.");
            System.out.println("The x is also a object of "+getForName("com.msn.spaces.bryantd001.SuperX")+" class.");

            System.out.println("Compare by the first way.");
            System.out.println("The x is a object of X: "+(x instanceof X));
            System.out.println("The x is a object of SuperX: "+(SuperX.class.isInstance(x)));
            System.out.println("Compare by the second way.");
            System.out.println("The x is a object of X: "+(x.getClass() == X.class));
            System.out.println("The x is a object of SuperX: "+(x.getClass().equals(SuperX.class)));
      }

}

HarmonyOS 开发实践 —— 基于class-transformer的对象JSON相互转换 使用三方库class-transformer搭配JSON的JSON.parse,可以满足类似gson/fastjson绝大部分的需求,更多用法可以参考 https://github.com/typestack/class-transformer 文档。此外,建议审视设计的类和json是否合理,尽量避免使用复杂的转换。 阅读详情

相关推荐

【鸿蒙实战开发】基于class-transformer的对象JSON相互转换

使用三方库class-transformer搭配JSON的JSON.parse,可以满足类似gson/fastjson绝大部分的需求,更多用法可以参考​​文档。此外,建议审视设计的类和json是否合理,尽量避免使用复杂的转换。●如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:●关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。

HarmonyOS007的博客 1500

获取Class对象的几种方式

反射、获取class对象

Jimxinfang的博客 8485

Class对象获取的三种方法

Class对象获取的三种方法

获取class对象的六种方式

我们将前面4种方法打印//cls1,cls2,cls3,cls4 其实是同一个对象结果:4种方法获得对象都是一样的!这是因为在内存里边,不管怎么处理,在class对象/堆里只有,对于一个类而言只有一个class对象之对应。

a545__27的博客 3094

获取 Class 对象三种方式

获取 Class 对象三种方式

tanqin的博客 2232

类,对象(实例),类的成员简介

//此文为在BiliBili大学学习刘铁猛刘老师的C#课程的笔记,刘老师的课程对于我一个初学者来说,看了之后可谓是茅塞顿开。此文目的是供个人学习和复习使用,并无侵权之意,也无为他人师之心。本人目前只是大一学生,仅有微薄的C语言基础,水平有限,难免对刘老师的课程内容有所曲解,欢迎大家指正和教导,希望各位不吝赐教。//

m0_65131267的博客 4645

Class对象和枚举对象比较

一、Class对象间的比较 结论 都可以,推荐使用 == 进行比较 原因 1、源码 查看Class类的源码可知,其并未重现equals()方法,当调用equals()方法时,实际上调用的时Object类的equals()方法,里面直接进行的==判断,因此使用equals()方法使用 == 得到的结果是一样的。 2、原理 Class类是一个特殊类,它用于表示JVM运行时类或接口的信息,是类被JVM加载后在内存中创建的一个该类的Class对象,用来存储该类的各种信息。 因此Class对象的创建只JVM

czm_ob的博客 726

获取Class类实例三种方式

文章目录1.Class类实例是什么?2.获取Class类实例三种方式 1.Class类实例是什么? 2.获取Class类实例三种方式 1.Class类中的静态方法: 2.Object类中的getClass()方法: 3.每个类的.class属性 下面通过实例来看如何获取Class对象: 先写一个Person类:这个类中有成员变量,成员方法,构造方法,并且修饰符和参数不同 获取C...

你今天真好看呀 1493

Java中获取Class对象三种方式

在Java中,Class对象一个非常重要的概念,它代表了Java中的类、接口、数组类、基本数据类型或void关键字。本文将介绍获取Class对象三种常用方式。

✨ 欢迎来到【Seal ^_^ 的CSDN博客】!✨ 8567

Java产生Class类的三种实例化对象方法

Java产生Class类的三种实例化对象方法 1.object.getClass 2.类名.class直接根据某个具体的类来取得Class实例化对象 3.Class.forName(String className) public class TestClass { public static void main(String[] args) { //1.object.g...

迁就100 1万+

反射获取Class对象三种方法

反射获取Class对象三种方法 package reflect; public class reflectTest { public static void main(String[] args) throws Exception { //第一种方式获取Class对象 Student stu1 = new Student();// 这一new,产生一个Student对象一个Cla...

weixin_45361590的博客 1017

Java反射 获得Class对象的五种方法

通过Class.forName(类名)获得。但这种方式获得Class对象的泛型类型只能是通配符的,从下面的两行注释代码可知,要想获得更具体的泛型类型时,都会编译报错。 通过对象.getClass()获得。这种方式获得Class对象的泛型类型,虽然比上一种更加具体,可以是Class<? extends building>了,但不能具体到Class<building>了。 通过类名.class获得。这种方式获得Class对象的泛型类型,最具体,是Class<building>。 通过ClassLoader

anlian523的博客 2037

获取Class对象的3种方式

反射入门 能够分析类能力的程序称为反射(reflective)。 反射机制可以用来: 在运行时分析类的能力 在运行时检查对象 实现泛型数组操作代码 利用Method对象,这个对象很像C++中的函数指针 Java运行时系统始终为所有对象维护一个运行时类型标识。这个信息会跟踪每个对象所属的类。可以使用一个特殊的Java类访问这些信息。保存这些信息的类名为Class。 获取Class对象的3种方式: Object类中的getClass()方法将会返回一个Class类型的实例。 Emp

qq_41301846的博客 416

【Java】包装类和基本数据类型Class比较

需求 需要使用反射,获取一个函数的基本数据类型返回值类型,然后创建一个默认值返回。而且还需要提供一个包装类和其基本数据类型的比较方法。 准备知识 1、int.class Integer.class Integer.class 是 int.class 的包装类,如果两者直接 == 比较,返回是 false,原理是因为 Integer 的 class 内存地址和 int 的 class 内存地址不同,具体可以在 jvm 源码看到: JVM_QUICK_ENTRY(jboolean, JVM_Is..

qq_28033719的博客 1142

获取一个class对象的方式有那些?

第一种:通过类对象的getClass()方法来获取,这个getClass()是object类里面的方法。 User user =new User() Class<?> clazz =user.getClass() 第二种:通过类的静态成员表示,每个类都有静态成员ClassClass<?> clazz = User.Class三种:通过Class类的静态方法forName()方法来获取。 Class<?> clazz = Class.formName(

weixin_46450329的博客 485

Python——面向对象(OOP)封装篇(实例对象、类对象、类方法、实例方法、静态方法、类属性、实例属性)

关于Python封装相关的基本知识

m0_66881249的博客 2124

类和对象4:类、类对象、实例对象

Python学习-类、类对象和实例对象:基本概念、实例对象的属性和方法、命名冲突、类对象的删除

davidksatan的博客 4894
上一篇: RTTI机制的Class对象
下一篇: 数组的排序
bryantd
博客等级 码龄22年 7粉丝 21原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值