举一个由于类型擦除而无法编译的Java代码示例

时间:2017-05-02 16:57:05

标签: java generics type-erasure

泛型使用类型擦除来在运行时删除类型,这就是我们在Java中实现参数多态的方法,但我似乎无法提出由于类型擦除而无法编译的示例代码。任何建议将不胜感激:)

2 个答案:

答案 0 :(得分:1)

例如:

public void method(Object o) {
    ...
}

public <T> void method(T t) {
    ...
}

由于T的删除是Object,因此方法签名最终会相同,并且您无法使用相同签名的多个方法。它无法编译错误:

error: name clash: <T>method(T) and method(Object) have the same erasure
    public <T> void method(T t) {
                    ^
  where T is a type-variable:
    T extends Object declared in method <T>method(T)
1 error

答案 1 :(得分:1)

尝试创建像T[] array这样的通用数组,其中T是泛型类型。