Sun JDK 1.5 не может разыменовать ошибку с помощью универсальных шаблонов

У нас есть иерархия классов, подобная этой:

public class TestDereference {
 private static MainInterface mi = new MainInterfaceImpl();

 public static void main(String[] args) {
  System.out.println(mi.getSubInterface().getField());
 }
}

interface MainInterface {
  T getSubInterface();
}

interface SubInterface {
 Field getField();
}

class Field {
 @Override
 public String toString() {
  return "Hooray!";
 }
}

class SubInterfaceImpl implements SubInterface {
 Field f = new Field();

 public Field getField() {
  return f;
 }

}

class MainInterfaceImpl implements MainInterface {
 SubInterfaceImpl si = new SubInterfaceImpl();

 public  T getSubInterface() {
  return (T) si;
 }
}

На самом деле интерфейсы имеют более одной реализации, но проблема не в этом. Компиляция с помощью компилятора Eclipse или Java 1.6 отлично работает (как показано на ideone ). Но если я попытаюсь скомпилировать это с помощью Java 1.5 (что является одним из требований нашего проекта), выдает следующую ошибку:

TestDereference.java:12: test.SubInterface cannot be dereferenced
                System.out.println(mi.getSubInterface().getField());
                                                     ^

Также обратите внимание, что этого не происходит с JDK 1.6 с использованием -target 1.5 либо только с JDK 1.5

Единственные случаи возникновения этой ошибки, которые я нашел в Интернете, связаны с такими действиями:

double d = 2.0;
d.toString();

где очевидно, в чем проблема.

Но в моем случае это должно быть работают, поскольку ясно, что getSubInterface () возвращает реализующий класс SubInterface , который определенно имеет метод getField () .

Так это ошибка компилятора? И какие у меня есть варианты, кроме выполнения mi. getSubInterface () каждый раз (что работает, но поскольку Eclipse не отмечает это как ошибку, большинство людей в команде забывают это делать, и большинство из них используют только JDK 1.6, поэтому они не замечают этого и при компиляции с использованием строки maven / cmd)?

6
задан Andrei Fierbinteanu 10 November 2010 в 13:22
поделиться