Я согласен с комментарием Эрана Циммермана.Это говорит о том, что вам нужно переосмыслить то, что вы хотите.
В любом случае, я надеюсь, что правильно понял проблему, поэтому я изменил параметр с одного на буксирный, чтобы описать state
и hasAState
отдельно.
public abstract class State<S extends State<S, H>, H extends HasAState<S, H>>{
protected H parent;
public void setParent(){
parent.removeState(this);
this.parent = parent; //!!!this line has no effect!!!
parent.addState(this);
}
}
public interface HasAState<S extends State<S, H>, H extends HasAState<S, H>> {
public void addState(State<S, H> state);
public void removeState(State<S, H> state);
}
Этот код компилируется!- знать о предупреждении для второй строки в setParent
.