Указать 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 шт):

Автор решения: Spliterash

Абстрактный класс менеджера

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>
→ Ссылка