类型描述
Java中有两大类型,原生类型和对象类型
不管哪种,都可以用.class
的方式获取类型对象,比如Object.class
,int.class
类型是用Class泛型类表示,泛型参数就是实际的类
类型间关系
Class类提供两个方法判断类型关系
1 | public native boolean isInstance(Object obj); |
- 类型和实例之间
有关键字instanceof
等同于类方法
1 | Integer.valueOf(1) instanceof Number; //true |
尽管null可以认为是任何类型,但是不会通过instanceof
判定
因此通过判定后可以放心的后续使用,不必担心是null
1 | null instanceof String //false |
- 类型之间
判断一个类型是不是一个类的(子)类型,使用isAssignableFrom
,检测能否接受赋值
1 | Class<?> clazz = Integer.class; |
对象类型
对象类型的实例还可以调用方法获取
1 | public final native Class<?> getClass(); |
判断一个对象是不是一个(子)类的实例,使用关键字instanceof
1 | Object obj = Integer.valueOf(1); |
或者使用方法
1 | Number.class.isInstance(obj); |
枚举是一种特殊的对象,判断是否枚举可以用isEnum
1 | Class<?> clazz = Month.class; |
原生类型
原生可以通过isPrimitive
区分
原生类型包含9种,boolean,char,byte,short,int,long,float,double,void
1 | Class<?> clazz = int.class; |
数值原生类型的Class类型还可以从包装类的TYPE
获得
1 | System.out.println(Integer.TYPE == int.class); //true |
原生类型是不能直接使用instanceof
的,但是可以直接赋给Object对象,利用自动装箱机制
1 | Object obj = 1; |
类型层面并不包含拆装箱机制,原生类型和包装类在类型层面是互不相容的
1 | boolean canPrimitiveToObject = Integer.class.isAssignableFrom(int.class); //false |
类型名称
Class类提供三种方法获得类名表示
- getName: JVM内部类型名
- getCanonicalName: 包含包名的全限定名
- getSimpleName: 不包含包名
1 | package test; |
一分也是爱~
版权声明
This site by Linest is licensed under a Creative Commons BY-NC-ND 4.0 International License.
由Linest创作并维护的博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。