Этот метод:
static <T extends dataCharge> T timePass(T element){
T res = element.change(element);
return res;
}
Использует raw (т.е. нетипизированный) dataCharge
. Вы должны ввести его, а также вернуть тип dataCharge
, а не (под) класс dataCharge
.
Учитывая то, как вы его использовали, то есть для передачи себя в свой собственный метод, предлагает, чтобы dataCharge
был проще определен как поставщик из dataCharge
и имел прямой доступ к своему собственному состоянию при создании результата:
interface dataCharge<A>{
public A change();
}
class APCDcharge implements dataCharge<APCDcharge> {
// other code
@Override
public APCDcharge change() {
APCDcharge newele = new APCDcharge();
newele.setCharge(getCharge()+100);
newele.setName(getName());
return newele;
}
}
Тогда ваш timePass
метод становится:
static <T> T timePass(dataCharge<T> element){
T res = element.change();
return res;
}