У вас два несвязанных типа T
. В объявлении вашего метода <T>
повторно объявляет тип T
, скрывая переменную типа уровня класса.
Короче говоря, вам не нужно, чтобы метод был generi c, потому что вы хотите, чтобы setValue
принял тип, объявленный в классе. Поскольку параметр типа доступен во всем классе, ваш метод должен быть таким же простым, как:
protected void setValue(T value) {
if (value != null)
this.value = value;
}
Если ваш абстрактный класс также является generi c, то в него также необходимо внести такую же коррекцию. В противном случае вам придется пересмотреть его конструкцию, так как использование метода, принимающего случайно типизированные значения, не совсем правильное.