Указать Generic тип в абстрактном классе
У меня есть 2 класса, AbstractJobManager который выдаёт работу, и AbsractJob соотвественно сама работа. Мне нужно сделать так, чтобы эти классы были связанны друг с другом, то есть указать как generic тип у AbstractJobManager работу которую он выдаёт, а у самой работы указать как generic тип менеджер, так как в дальшейшем хочу получать manager у объекта работы. Те нужно сделать как то так:
public abstract class AbstractJobManager<J extends AbstractJob<ТЕКУЩИЙ КЛАСС>>
public abstract class AbstractJob<M extends AbstractJobManager<ТЕКУЩИЙ КЛАСС>>
Чтобы потом можно было сделать метод в AbstractJob, где M это менеджер
public final M getJobManager() {}
А так же метод в AbstractJobManager где J это работа игрока
public J getPlayerJob(Player player) {}
Ответы (1 шт):
Абстрактный класс менеджера
public abstract class AbstractJobManager<J extends AbstractJob<? extends AbstractJobManager<J>>>
Абстрактный класс работы
public abstract class AbstractJob<M extends AbstractJobManager<? extends AbstractJob<M>>>
Например, если мне нужно будет сделать работу такси, то выглядеть это будет так
Класс менеджера
public class TaxiManager extends AbstractJobManager<TaxiJob>
Класс работы
public class TaxiJob extends AbstractJob<TaxiManager>