У меня есть следующие классы:классы Java Generic Переуступка
public interface ModelObject {
}
public interface Resource {
}
public interface Transformer <F,T>{
}
public interface WrapperFactory {
Transformer<Resource, Wrap<? extends ModelObject>> createMapper();
}
public class Wrap<E extends ModelObject> {
}
public class AbstractBaseTransformer<F,T> implements Transformer<F,T> {
}
public class ConcreteModel implements ModelObject {
}
public class ConcreteTransformer extends AbstractBaseTransformer<Resource, Wrap<ConcreteModel>> {
}
public class ConcreteFactory implements WrapperFactory {
@Override
public Transformer<Resource, Wrap<? extends ModelObject>> createMapper() {
return new ConcreteTransformer();
}
}
ConcreteFactory не компилирует о том, что ConcreteTransformer несовместима с возвращено
Transformer<Resource, Wrap<? extends ModelObject>>
Я не могу увидеть, что здесь не так. ConcreteTransformer связывает 1-й параметр ресурса (так же, как и ожидалось) при связывании 2-й параметр для:
Wrap<ConcreteModel>
, который должен связываться с:
Wrap<? extends ModelObject>
в ConcreteModel реализует его.
Является ли это происходит в Eclipse, или в JDK? Компилятор Eclipse содержит несколько ошибок. – gparyani
@dsmog Правильная терминология - это «generics» (Java), «классы шаблонов» (синтаксически подобная, но концептуально очень различная концепция в C++). –