Ковариантный тип возвращаемого значения в интерфейсе не компилируется через Javac

У меня следующая структура:

public interface BarReturn {}
public interface FooReturn {}
public interface FooBarReturn extends FooReturn, BarReturn {}

public interface Foo {  
  FooReturn fooBar( );
}

public interface Bar {
  BarReturn fooBar();
}

public interface FooBar extends Foo, Bar {
  FooBarReturn fooBar();
}

Javac не работает со следующим сообщением:

FooBar.java:2: types Bar and Foo are incompatible; both define fooBar(), but with unrelated return types
public interface FooBar extends Foo, Bar {
       ^
1 error

Однако Eclipse может скомпилировать его нормально, и насколько я вижу, он должен компилироваться - метод fooBar () FooBar удовлетворяет условиям контракта как Foo, так и метода fooBar () Bar за счет использования ковариантных возвратов.

Это ошибка компиляции Eclipse или javac? способ убедить javac скомпилировать его? Для справки мои параметры javac выглядят так:

javac -d /tmp/covariant/target/classes -sourcepath /tmp/covariant/src/main/java: /tmp/covariant/src/main/java/Foo.java /tmp/covariant/src/main/java/BarReturn.java /tmp/covariant/src/main/java/FooBarReturn.java /tmp/covariant/src/main/java/Bar.java /tmp/covariant/src/main/java/FooReturn.java /tmp/covariant/src/main/java/FooBar.java -g -nowarn -target 1.6 -source 1.6
9
задан Robert Elliot 14 August 2011 в 00:18
поделиться