Почему Eclipse это компилирует, а javac нет?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему Eclipse это компилирует, а javac нет?

Сообщение Anonymous »

У нас есть несколько модульных тестов, которые нормально компилируются и выполняются в Eclipse 3.4, но когда мы пытаемся скомпилировать их с помощью javac, это не удается. Мне удалось сократить код до чего-то небольшого и автономного, поэтому он не имеет внешних зависимостей. Сам код не будет иметь особого смысла, поскольку весь он вырван из контекста, но это не имеет значения — мне просто нужно выяснить, почему javac это не нравится:

Код: Выделить всё

public class Test {

public void test() {
matchOn(someMatcher().with(anotherMatcher()));
}

void matchOn(SubMatcher matcher) {}

SubMatcher someMatcher() {
return new SubMatcher();
}

Matcher anotherMatcher() {
return null;
}
}

interface Matcher  {}

class BaseMatcher implements Matcher {
public BaseMatcher with(Matcher matcher) {
return this;
}
}

class SubMatcher extends BaseMatcher {
@Override
public SubMatcher with(Matcher matcher) {
return this;
}
}
Я пробовал использовать JDK 1.5.0_10 и 1.6.0_13, результат тот же:

Код: Выделить всё

Test.java:6: matchOn(test.SubMatcher) in test.Test cannot be applied to (test.BaseMatcher)
matchOn(someMatcher().with(anotherMatcher()));
^
1 error
Я думаю, что это совершенно правильный Java. Метод SubMatcher.with() возвращает более конкретный тип, чем BaseMatcher.with(), но компилятор, похоже, считает, что тип возвращаемого значения — BaseMatcher. Однако возможно, что компилятор Eclipse ошибочно разрешает то, чего не должно быть.

Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/117 ... vac-doesnt
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»