<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>