标签:string 理解 extends 通过 div new 方法 end UNC
/** * 在阅读别人写的源代码中,有时候可以看到同样功能的泛型方法中的参数可以写成 T t 或者 Class<T> cls * 那么,两者有什么区别呢? * * Class类,是代表加载到jvm中的类的字节码,这个类本身是泛型类,其后可以加<具体类>从而表示具体类的字节码类型, * 于是Class<T>,就代表了类T的字节码类型。于是Class<T> cls中的cls就是类型T的字节码对象实例。 * * 另一方面: * T t 就很好理解了,T是方法返回值前面的泛型列表中指定的泛型类型,小t表示这个类型的对象。 * * 请参考如下的三个方法仔细体会。 * */ /** * 接受任意类型的对象,并返回该对象。 * @param t * @param <T> * @return */ public <T> T doSomething0(T t) { return t; } /** * 接受任意字节码实例,并通过该字节码创建实例并返回。 * 但是由于方法指定返回类型是T,所以返回时候要做强制类型转换, * 因此传入的cls应该是返回值t对应类的字节码对象。 * 由于是强转没有做类型检查,所有使用了@SupperessWarning("unchecked")压制编译器产生的警告。 * @param cls * @param <T> * @return * @throws Exception */ @SuppressWarnings("unchecked") public <T> T doSomething1(Class cls) throws Exception { return (T) cls.newInstance(); } /** * 接受T类型的字节码对象,并根据此字节码对象创建对应类的实例并返回 * @param cls * @param <T> * @return * @throws Exception */ public <T> T doSomething2(Class<T> cls) throws Exception { return cls.newInstance(); } /** * 最后, * Class对象实例可以用任意类型对象的.getClass()方法取得, * Class对象的实例也可用任意类型.class 直接表示。 * * Class<String> stringClass = String.class; * Class<? extends String> aClass = "abc".getClass(); */
标签:string 理解 extends 通过 div new 方法 end UNC
原文地址:https://www.cnblogs.com/luohaonan/p/12536449.html