Рассмотрим следующий пример:
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>()));
}
}
Почему он печатает 1
в (A)
, но 2
с (B)
?
Я знаю, как работает разрешение метода, поэтому мне не нужно объяснять это мне.
Я хочу узнать более глубокую мотивацию этой "функции".
Почему в этом нет предупреждения о стирании? (Существует только один о Foo foo = new Foo()
.)
Почему разрешение метода использует стираемую семантику, хотя задан общий тип?