Java语言规范要求编译器以特殊方式处理此方法:
该方法
getClass返回表示Class对象类的对象。Class每个引用类型都有一个对象。例如,它可以用于发现类的完全限定名称,其成员,其直接超类以及其实现的任何接口。getClass的方法调用表达式的类型是
Class<? extends|T|>where,其中T是为getClass搜索的类或接口(第15.12.1节)。
因此,getClass的返回类型
getClass()是调用表达式的静态(编译时)类型。例如:
String s = "";Object o = s;Class<? extends String> sc = s.getClass(); // okClass<? extends Object> oc = o.getClass(); // okoc = sc; // oksc = o.getClass(); // not oksc = oc; // not ok
规范中对符号
|X|的定义如下:
类型擦除是从类型(可能包括参数化类型和类型变量)到类型(从不参数化类型或类型变量)之间的映射。我们
|T|为消除type而写T。擦除映射定义如下:
参数化类型(第4.5节)的擦除
G<T1,...,Tn>为|G|。嵌套类型的擦除
T.C为|T|.C。删除数组类型
T[]为|T|[]。擦除类型变量(第4.4节)是擦除其最左边界。
其他所有类型的擦除都是该类型本身。
例如,如果我们有:
List<String> list = ...;
表达式
list.getClass()是类型
Class<? extends List>而不是类型
Class<? extendsList<String>>。



