【发布时间】:2011-08-31 07:35:01
【问题描述】:
考虑这个例子:
import java.util.*;
class Foo<T> {
public int baz(List<String> stringlist) { return 1; }
public int baz(ArrayList<Object> objectlist) { return 2; }
public static void main(String[] args) {
Foo<String> foo = new Foo<String>(); // (A)
//Foo foo = new Foo(); // (B)
System.out.println(foo.baz(new ArrayList<String>()));
}
}
为什么它在(A) 中打印1,而在2 中打印(B)?
我知道方法解析的工作原理,所以无需向我解释。
我想知道这个“功能”背后的深层动机。
为什么没有关于它的擦除警告? (只有一个关于Foo foo = new Foo()。)
虽然给出了泛型类型,但为什么方法解析使用擦除语义?
【问题讨论】:
标签: java generics language-design overloading raw-types