15.8 擦除的补偿

  • new T() 无法实现,因为擦除,还因为不确定T有无参构造函数;
package chapter15._8;

public class Erased<T> {

    private final int SIZE = 100;

    public static void f(Object arg) {
        // if (arg instanceof T) {} // error
        // T var = new T(); // error
        // T[] array = new T[SIZE]; // error
        // T[] array = (T)new Object[SIZE]; // error
    }

}

package chapter15._8;

class Building {}
class House extends Building {}

public class ClassTypeCapture<T> {

    // 类型标签
    Class<T> kind;

    public ClassTypeCapture(Class<T> kind) {
        this.kind = kind;
    }

    public boolean f(Object arg) {
        // 如果arg可以转型成kind,返回true
        return kind.isInstance(arg);
    }

    public static void main(String[] args) {
        ClassTypeCapture<Building> ctt1 = new ClassTypeCapture<Building>(Building.class);
        System.out.println(ctt1.f(new Building()));
        System.out.println(ctt1.f(new House()));

        ClassTypeCapture<House> ctt2 = new ClassTypeCapture<House>(House.class);
        System.out.println(ctt2.f(new Building()));
        System.out.println(ctt2.f(new House()));
    }

}

输出

true
true
false
true

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容