2

Самый близкий вопрос, который я нашел (Method Chaining: How to use getThis() trick in case of multi level inheritance), не имел прямого ответа на мою проблему. В настоящее время я использую морфию и создаю службу отдыха. Я видел много версий того, как это реализовать, и решил сделать это таким образом. Я полностью открыт для предложений, однако, научиться справляться с этой проблемой, поможет мне в практике кодирования, по крайней мере, я думаю, что так будет. Кроме того, я знаю, что мои правила именования могут быть выключены так коррекции в том, что я открыт как хорошо :)Java Multilevel Generic Inheritance

Вот мой код:

      1st 
/*****************************************************************************/ 
public interface BaseRepository <T extends BaseEntity> { 
    /* Methods Here */ 
} 
public class BaseController<T extends BaseEntity> implements BaseRepository<T> { 
    public BaseController(Class<T> type) { 
     this.type = type; 
    } 
    /* Overridden Methods Here*/ 
} 
         2nd 
/*****************************************************************************/ 
public interface UserRepository<T extends UserEntity> extends BaseRepository<UserEntity> { 

    /* Methods Here */ 

} 

public class UserController<T extends UserEntity> extends BaseController<UserEntity> implements UserRepository<T> { 

    Class<T> type; 

    public UserController(Class<T> type) { 
     super(type); // <---- Error Here 
     this.type = type; 
    } 

В конце концов, я хочу иметь StudentController, StaffController, и т.д. наследуются от UserController. И BaseController будет родителем для других контроллеров (а не для пользователей). Однако я не знал, как правильно это сделать. Я стараюсь, чтобы удовлетворить

public UserController(Class<T> type) { 
     super(type); // <---- Error Here 
     this.type = type; 
    } 

замена «типа» в супер (типа) с UserEntity.class, однако, что бы только позволит Basecontroller вернуть свойства UserEntity. Любые решения? Если есть способ ... Как я уже сказал, я все еще участвую и полностью открыт к другим предложениям по подходу к этой проблеме или к любым советам в этой конкретной проблеме. Очень признателен! Спасибо :)

ответ

2

Я думаю, что вы хотели было

public class UserController<T extends UserEntity> extends BaseController<T> 
                implements UserRepository<T> { 

как это позволит вам пройти Class<T> к суперкласса.

+0

Я не знаю, почему я не сделал этого первым .... 1 символ. –

+0

@MichaelVillar, потому что генераторы и их сообщения об ошибках используют немного. Первые пару лет меня часто путали, но это было недавно. ;) –

+0

да, я все еще довольно новичок в этом, я ценю помощь! Благодаря! –