<div dir="ltr">Sziasztok!<div><br></div><div style>Szóval adott a névtelen osztály, aminek nem lehetnek konstruktor argumentumai. És adott egy abstract osztály amit névtelen osztályként akarok használni, ám muszály bizonyos dolgokat megkapnia a nem absztrakt metódusnak ahhoz, hogy működjön.</div>
<div style><br></div><div style>Konkrét példa: ICheckStateProvider JFace-ben. Akarok egy implementációt ami a isGrayed metódusra fix megoldást ad, de az isChecked metódust szabadon hagyja. Ezt ötlöttem ki:</div><div style>
<br></div><div style><div>public abstract class ContentBasedGrayingCheckStateProvider {</div><div><span class="" style="white-space:pre">        </span>protected InnerDelegate delegate = new InnerDelegate();</div><div><span class="" style="white-space:pre">        </span>protected ITreeContentProvider contentProvider;</div>
<div><span class="" style="white-space:pre">        </span></div><div><span class="" style="white-space:pre">        </span>public abstract boolean isChecked(Object element);</div><div><br></div><div><span class="" style="white-space:pre">        </span>public boolean isGrayed(Object element) {</div>
<div><span class="" style="white-space:pre">                </span>//Itt tudok valamit csinálni a contentProviderrel</div><div><span class="" style="white-space:pre">                </span>return false;</div><div><span class="" style="white-space:pre">        </span>}</div>
<div><span class="" style="white-space:pre">        </span></div><div><span class="" style="white-space:pre">        </span>public ICheckStateProvider withContentProvider( ITreeContentProvider contentProvider ) {</div><div><span class="" style="white-space:pre">                </span>this.contentProvider = contentProvider;</div>
<div><span class="" style="white-space:pre">                </span>return delegate;</div><div><span class="" style="white-space:pre">        </span>}</div><div><br></div><div><span class="" style="white-space:pre">        </span>protected class InnerDelegate implements ICheckStateProvider {</div>
<div><br></div><div><span class="" style="white-space:pre">                </span>@Override</div><div><span class="" style="white-space:pre">                </span>public boolean isChecked(Object element) {</div><div><span class="" style="white-space:pre">                        </span>return ContentBasedGrayingCheckStateProvider.this.isChecked(element);</div>
<div><span class="" style="white-space:pre">                </span>}</div><div><br></div><div><span class="" style="white-space:pre">                </span>@Override</div><div><span class="" style="white-space:pre">                </span>public boolean isGrayed(Object element) {</div>
<div><span class="" style="white-space:pre">                        </span>return ContentBasedGrayingCheckStateProvider.this.isGrayed(element);</div><div><span class="" style="white-space:pre">                </span>}</div><div><span class="" style="white-space:pre">        </span>}</div>
<div>}</div><div><br></div><div style>Felhasználni így kell majd:</div><div style><br></div><div style><div>ITreeContentProvider cp = ...;</div><div>new CheckboxTreeViewer(...).setCheckStateProvider( new ContentBasedGrayingCheckStateProvider() {</div>
<div><span class="" style="white-space:pre">                        </span></div><div><span class="" style="white-space:pre">                        </span>@Override</div><div><span class="" style="white-space:pre">                        </span>public boolean isChecked(Object element) {</div>
<div><span class="" style="white-space:pre">                                </span>// TODO Auto-generated method stub</div><div><span class="" style="white-space:pre">                                </span>return false;</div><div><span class="" style="white-space:pre">                        </span>}</div>
<div><span class="" style="white-space:pre">                </span>}.withContentProvider(cp));</div><div><br></div><div style>Mi a véleményetek? Nem akarok annyi nevesített osztályt gyártani. Rossz vagyok? Jobb ötletek van?</div><div style>
<br></div><div style>Gábor</div></div></div></div>