Рассмотрим следующий пример:
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 ()
.)
Почему разрешение метода использует стертую семантику, хотя общий тип задан?