【发布时间】:2016-05-08 08:40:43
【问题描述】:
看下面的简单sn-p:
public class GenericsOverloadingDistinguish<T> {
public void print1(T t) {
System.out.println("t");
}
public void print1(Integer i) {
System.out.println("integer");
}
}
public static void main(String[] args) {
new GenericsOverloadingDistinguish<Integer>().print1(new Integer(1));
}
这会导致模棱两可的方法调用,并且不会编译。
这让该类的用户完全困惑。它既不能调用print1(T t) 也不能调用print1(Integer i) simple,因为不幸的是它使用了Integer 作为泛型类型。
我知道泛型是编译时的并且存在类型擦除,但是 Java 没有防止此类错误的东西吗?
如果GenericsOverloadingDistinguish Class 已给定且无法更改,我只需要调用print1(T t) 并且T 是一个整数怎么办?
【问题讨论】:
-
我猜如果这样的类存在并且不可修改,那么它就是糟糕的设计。
标签: java generics compilation compiler-errors overloading