Ошибка компиляции связанных обобщений Java

1

У меня есть интерфейс, объявленный таким образом:

public interface GenericBo<T, PK extends Serializable> {

 public ResultObject create(T newInstance);
...
}

и абстрактный класс, объявленный таким образом:

public abstract class GenericServiceImpl<T, PK> implements GenericService<T, PK> {

    private final GenericBo<T, PK> bo;

    ......
    ......
    }

но у меня есть ошибка в абстрактном классе при объявлении экземпляра "bo": Связанное несоответствие: тип PK не является допустимым заменой ограниченному параметру типа GenericBo

Как следует объявлять экземпляр "GenericBo bo"? Каков правильный код?

Теги:
generics

2 ответа

2
Лучший ответ

У тебя есть

class GenericBo<T, PK extends Serializable>

поэтому, когда вы заявляете

private final GenericBo<T, PK> bo;

PK должен расширять Serializable.

Но

class GenericServiceImpl<T, PK>

не имеет такого ограничения. Вам нужно добавить его.

public abstract class GenericServiceImpl<T, PK extends Serializable> implements GenericService<T, PK> {

    private final GenericBo<T, PK> bo;

}
1

Проблема в том, что в абстрактном классе PK не требуется расширять Serializable. Либо измените общее определение абстрактного класса, чтобы PK расширяет Serializable, либо удаляет это требование из интерфейса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню