使用obj.getClass()获取对象类型时注意基本类型

获取Class对象的三种方法

  1. 使用 Class 类的 forName 静态方法;
  2. 直接获取某一个对象的 class;
  3. 调用某个对象的 getClass() 方法
public class ClassTest {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        Class c1 = Class.forName("reflect.Employee");   // 第1种,forName 方式获取Class对象
        Class c2 = Employee.class;      // 第2种,直接通过类获取Class对象
        Employee employee = new Employee("小明", "18", "写代码", 1, "Java攻城狮", 100000);
        Class c3 = employee.getClass();    // 第3种,通过调用对象的getClass()方法获取Class对象

        if (c1 == c2 && c1 == c3) {     // 可以通过 == 比较Class对象是否为同一个对象
            System.out.println("c1、c2、c3 为同一个对象");
            System.out.println(c1);     // class reflect.Employee
        }
    }
}

Java中有8中基本类型:byte、short、int、long、float、double、boolean、char,这8种类型的变量是不能通过obj.getClass()方法直接获取其Class对象的,而它们分别对应8种
包装类型:Byte、Short、Integer、Long、Float、Double、Boolean、Character,这8种包装类型的变量是可以通过obj.getClass()方法获得其Class对象的。

注意String不是基本类型,它的底层由char[]实现,String类型的变量可通过obj.getClass()方法获得其Class对象。

例如一个int类型的变量,是无法调用.getClass()方法的:

而将其转变为Object类型后,可以发现它被自动转成了Integer类型。

public static void main(String[] args) {
   int intobj = 0;
   Object obj = intobj;
   System.out.println(obj.getClass().getName());//打印结果为java.lang.Integer
}

根据类型名获取类型对象的正确方法为:

public Class getArgTypeClass(String typeStr) {
    switch (typeStr) {
        case "byte":
            return byte.class;
        case "short":
            return short.class;
        case "int":
            return int.class;
        case "long":
            return long.class;
        case "float":
            return float.class;
        case "double":
            return double.class;
        case "boolean":
            return boolean.class;
        case "char":
            return char.class;
        default:
            return typeStr.getClass();
    }
}

参考:java反射机制详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值