Проблема в том, что этот класс наследуется как от интерфейсов Entity, так и от OfflinePlayer, которые имеют конфликтующие аннотации.
Для Entity getLocation() определяется как NonNull:
Код: Выделить всё
@NotNull
Location getLocation();
Код: Выделить всё
/**
* Gets the player's current location.
*
* @return the player's location, {@code null} if player hasn't ever played
* before.
*/
@Nullable
public Location getLocation();
Является ли интерпретация IntelliJ или Eclipse «более правильной» или результат неоднозначен, учитывая противоречивую аннотацию в спецификации API?
При тестировании такого рода неоднозначного наследования IntelliJ допускает @NotNull без каких-либо предупреждений или ошибок, но @Nullable выдает предупреждение:
Код: Выделить всё
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class Main {
interface ITestNotNull {
@NotNull
Object ambiguous();
}
interface ITestNullable {
@Nullable
Object ambiguous();
}
static class ITest implements ITestNullable, ITestNotNull {
@Override
// Method annotated with @Nullable must not override @NotNull method
public @Nullable Object ambiguous() {
return new Object();
}
}
public static void main(String[] args) {
ITest a = new ITest();
System.out.println(a.ambiguous());
}
}
Код: Выделить всё
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
public class Main {
interface ITestNotNull {
@NonNull
Object ambiguous();
}
interface ITestNullable {
@Nullable
Object ambiguous();
}
static class ITest implements ITestNullable, ITestNotNull {
@Override
// The return type is incompatible with '@NonNull Object' returned from
// Main.ITestNotNull.ambiguous() (mismatching null constraints)
public @Nullable Object ambiguous() {
return new Object();
}
}
public static void main(String[] args) {
ITest a = new ITest();
System.out.println(a.ambiguous());
}
}
После дальнейшего рассмотрения и анализа проблемы выяснилось, что проблема, с которой я столкнулся, кажется ошибка в Eclipse. Реализация @NonNull в IntelliJ кажется правильной. Независимо от неоднозначности, он удовлетворяет обеим возможным реализациям.
https://github.com/eclipse-jdt/eclipse. ... ssues/2308
Подробнее здесь: https://stackoverflow.com/questions/782 ... terfaces-i