Почему необработанные типы в одном месте приводят к тому, что общие сайты вызовов в другом месте обрабатываются как необработанные?

Рассмотрим следующий пример:

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 () .)

Почему разрешение метода использует стертую семантику, хотя общий тип задан?

12
задан soc 23 May 2011 в 16:47
поделиться