Я реализовал следующие классы Java:
public class Data<T> {
private List<T> data;
public List<T> getData() {
return this.data;
}
public Data<T> setData(List<T> data) {
this.data = data;
return this;
}
public Data<T> getAsNullIfEmpty() {
if (this.data == null || this.data.isEmpty())
return null;
return this;
}
}
public class IntegerData extends Data<Integer> {}
Я бы хотел, чтобы метод getAsNullIfEmpty()
мог вызываться его экземплярами подклассов.
В строке IntegerData integerData = new IntegerData().getAsNullIfEmpty();
выдается следующая ошибка компиляции: incompatible types: Data<java.lang.Integer> cannot be converted to IntegerData
Я попытался изменить тело метода getAsNullIfEmpty()
на следующее:
public <E extends Data<T>> E getAsNullIfEmpty() {
if (this.data == null || this.data.isEmpty())
return null;
return this;
}
Thisне компилируется, потому что Data<T>
не расширяет себя. Есть ли способ сделать это, не возвращаясь к переопределению метода в каждом из дочерних классов или не используя явное приведение?