Я получаю очень странную ошибку компиляции в приведенном ниже Java-коде.Java Generic Тип возвращаемого файла Проблема
У меня есть простой интерфейс, имеющий API с родовым типом возвращаемого значения:
public interface AttributeGenerator {
<T> T generateAttribute(Record record);
}
Я могу написать реализацию, и это одна отлично компилируется:
public class StringAttributeGenerator implements AttributeGenerator {
@Override
public String generateAttribute(Record record) {
return "Test";
}
}
Теперь, позволяет сказать, я добавить еще параметр к указанному интерфейсу.
public interface AttributeGenerator {
<T> T generateAttribute(Record record, Set<Integer> indices);
}
И я обеспечиваю другую реализацию, как:
public class StringAttributeGenerator implements AttributeGenerator {
@Override
public String generateAttribute(Record record, Set<Integer> indices) {
return "Test";
}
}
Компиляция терпит неудачу и жалобы компилятора, что:
Метод не отменяет из своего суперкласса.
Я не могу понять, почему компилятор не может скомпилировать второй экземпляр, и если это не так, я хотел бы понять, почему Java не может предоставить пользователю возможность написать такой код.
Первый фрагмент кода не компилировать для меня (JDK 1.8.0_60) – Tunaki
@Tanuki Странно! Он компилируется для меня отлично! Какая у вас ошибка ? – bhuwansahni
Составив первый фрагмент, я получаю: 'Тип безопасности: Тип возврата Строка для generateAttribute (Запись) из типа StringAttributeGenerator нуждается в необработанном преобразовании, чтобы соответствовать T от типа AttributeGenerator', но у меня есть это предупреждение в eclipse. – azurefrog