Sto ottenendo l'avviso del compilatore:compilazione: chiamata non controllato a XXX come membro del tipo grezzo
avvertimento: [incontrollato] chiamata deselezionata per setview (V) come membro del tipo grezzo AbstractPresenter
this.presenter.setView(this);
dove V è un tipo variabile:
V estende AbstractView dichiarato nella classe AbstractPresenter
Il codice della classe AbstractPresenter
è il seguente:
public abstract class AbstractPresenter<V extends AbstractView, M>
implements Presenter<V, M> {
private M model;
private V view;
@Override
public final V getView() {
return this.view;
}
public final void setView(V view) {
if (view == null) {
throw new NullPointerException("view cannot be null.");
}
if (this.view != null) {
throw new IllegalStateException("View has already been set.");
}
this.view = view;
}
@Override
public final M getModel() {
return this.model;
}
protected final void setModel(M model) {
if (model == null) {
throw new NullPointerException("model cannot be null.");
}
this.model = model;
}
}
Il metodo setView
viene chiamato nella classe AbstractView
di seguito:
public abstract class AbstractView<P extends AbstractPresenter> extends
UserControl {
private final P presenter;
public AbstractView(P presenter) {
this.presenter = presenter;
this.initialisePresenter();
}
private void initialisePresenter() {
if (this.presenter == null){
throw new IllegalStateException();
}
this.presenter.setView(this); //This is the call that raises the warning
}
protected P getPresenter() {
return this.presenter;
}
}
Ho cercato le domande degli altri membri per quanto riguarda lo stesso avvertimento e ho cercato di adattare le soluzioni al mio problema ma non ha funzionato.
Non capisco il motivo per cui l'avviso viene sollevato come il tipo V
è costretto nella dichiarazione della classe AbstractPresenter
:
public abstract class AbstractPresenter<V extends AbstractView, M>
implements Presenter<V, M>
E 'solo un avvertimento e ho potuto ignorarlo, ma vorrei capisco perché succede e voglio ottenere il mio codice il più pulito possibile.
I riferimenti ciclici nel codice mi danno fastidio. Perché la vista deve avere un presentatore e perché a sua volta il relatore deve avere una vista? Non puoi convertirlo in una relazione a senso unico? – CKing
http://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use-it – kervin
@Chetan Kniger e Kervin Grazie a entrambi, ora so cos'è un tipo grezzo e in effetti ho dei riferimenti ciclici che si trasformeranno in eredità circolare se parametrizzo la dichiarazione di V nella classe AbstractPresenter ... Quindi ho bisogno di tornare alla parte di progettazione. Penso che la vista non abbia bisogno di fare riferimento al presentatore qui. –