<html>
<head>
<meta content="text/html; charset=ISO-8859-2"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">Szia!<br>
<br>
Hogy ne csak "miért nem lehet konstruktor" kérdést járjuk körbe,
hanem az eredeti kérdésedre is legyen válasz, íme az én
véleményem. (De ez csak szigorúan a magánvéleményem.)<br>
<br>
Igen, rossz vagy. Over-engineered. Minimum kétszer annyi kódot
írsz, mint amit akkor kéne, ha elneveznéd az osztályodat (nested
class). Gondolj arra, mi lesz, ha egy junior meglátja a kódot.
Gondolj arra, hogy mi lesz, amikor te magad egy fél év múlva
meglátod a kódot. Nálam a code review-n nem menne át.<br>
<br>
Üdv,<br>
Stivi<br>
<br>
<br>
On 2013-01-31 13:04, Gábor Lipták wrote:<br>
</div>
<blockquote
cite="mid:CAN-m_U=L0MA18e++6mZuQqP0jYJri5-puzNw6MoiaYa02Vjf4Q@mail.gmail.com"
type="cite">
<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>
<br>
</blockquote>
<br>
</body>
</html>