Пожалуйста, помогите.Я не могу иметь дело с дженериками.У меня есть: Общий репозиторий интерфейса:
@NoRepositoryBean
public interface PageBaseRepository<T extends PageBase> extends CrudRepository<T, Long> {
List<T> findAllByUserId(UUID userId);
}
@Repository
public interface StandardPageRepository extends PageBaseRepository<StandardPageEntity> {
}
@Repository
public interface BlockPageRepository extends PageBaseRepository<BlockPageEntity> {
}
@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class PageBaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
private UUID userId;
private String content;
@Entity
public class StandardPageEntity extends PageBaseEntity {
private String extraField;
}
@Entity
public class BlockPageEntity extends PageBaseEntity {
private String blockPosition;
}
@Component
@RequiredArgsConstructor
public class PageRepositoryFactory {
private final StandardPageRepository standardPageRepository;
private final BlockPageRepository blockPageRepository;
public <R extends PageBaseRepository<E>, E extends PageBaseEntity> R getRepository(final E entity) {
if (entity instanceof StandardPageEntity) {
return standardPageRepository;
}
if (entity instanceof BlockPageEntity) {
return blockPageRepository;
}
throw new IllegalArgumentException("Not recognised pension object " + pensionEntity.getClass());
}
}
Я получаю подсказку в intelij:
Несовместимые типы.Обязательно: R Найдено: StandardPageRepository
и ошибка в консоли:
PageRepositoryFactory.java: 15: ошибка: несовместимые типы: StandardPageRepository не может быть преобразовано в R return standardPageRepository;^ где R, E - переменные типа: R расширяет PageBaseRepository, объявленный в методе getRepository (E) E расширяет PageBaseEntity, объявленный в методе getRepository (E)
Одна вещь, которую я обнаружил, заключается в том, что я могу выполнять приведение, но это ужасно, компилятор говорит, что это Unchecked cast
.И я не хочу это предупреждение.