Object 对象
Object是Java中的基类,大部分的对象都是继承于这个类。
public class Object {
....
public native int hashCode();
public boolean equals(Object obj) {
...
}
public String toString() {
...
}
}
以上是其定义,可以看出来其定义了一些基础方法,比如hashCode等等。
Class类的类
「Class类」是其本身也是一个类,且不可以继承,它指向的是「实例的定义」是「类的类」
注意本文中「Class类」和「Class」意思不同,前者指的是『public final class Class』,后者值得是『类这个概念』
public final class Class<T> implements java.io.Serializable,
java.lang.reflect.GenericDeclaration,
java.lang.reflect.Type,
java.lang.reflect.AnnotatedElement {
......
}
可以看得出其本身实现了一些接口,主要是反射中的。
T 模板
T是代表模板,可以「代表任何Object」,其主要是放在各种单书名号中,一般是类名或者问号。
- 问号代表不确定
- 名字代表确定
- T则代表任意一个「继承于Object的类」
T控制返回值
当要使用T时需要通过「中括号T」来声明,其相当于finally或者static之类的限定符号
public finally static <T> T method(Class<T> clazz) {
return T;
}
除去方法的限定词
T method(Class<T> clazz);
- 该方法是一个返回值为T,入参为任意「Class类」的方法
- 返回值根据传入的对象确定
- 返回的是「Class类」的一个实例化Object。
控制容器内容
public static <T> List<T> select(T object);
根据输入参数T可以保证返回的List对象中全部都为T的实例。
T用于强行转换
由于T本身作为一个模板,所以也可以用于强行类型转换
List<T> list = (List<T>) object;
resultList.add((T) BeanMapperUtil.objConvert(tempDO,objectBO.getClass()));
Class/Class类/Object/T的逻辑关系
如上总结
- 「Class类」是一个「Class」和Object同一级别,且不可以被继承
- Object代表对象,是实例,实例就是某个「Class」的new实例化
- T则是代表任意一个继承于Object的「Class」
看上去还是很晦涩,所以就拿String进行举例
class SomeObject extends Object {
T method(Class<T> clazz);
}
SomeObject some = new SomeObject();
Class clazz = some.getClass();
SomeObject someT = some.method(clazz);
- 它的「Class」是「someObject」,它的实例some是一个「Object」
- 「class SomeObject extends Object」可以被一个「Class类」的实例clazz指向
- 当method被调用,输入了clazz,返回值就是「someObject」,那么T就是「someObject」这段字符
妈蛋 还是很晦涩。。。。。我也不知道该怎么讲了。。。总之,你感觉感觉。。。
关于「Class」这个概念,就是类这个概念如何产生的,可以看另外一个文章面向对象语言的吹逼