[Javalist] Hogyan kényszerítsünk egy anonymous classt bizonyos dolgok megadására

Gábor Lipták gabor.liptak at gmail.com
2013. Jan. 31., Cs, 14:15:25 CET


Már beláttam a dolgot. Sajnos abból indultam ki, hogy nem lehet nem default
konstruktort hívni. De lehet. Szóval nincs szükség a sok kódra.


2013. január 31. 13:59 István Székely írta, <istvan.szekely at i-logic.hu>:

>  Szia!
>
> 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.)
>
> 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.
>
> Üdv,
> Stivi
>
>
> On 2013-01-31 13:04, Gábor Lipták wrote:
>
> Sziasztok!
>
>  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.
>
>  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:
>
>  public abstract class ContentBasedGrayingCheckStateProvider {
>  protected InnerDelegate delegate = new InnerDelegate();
>  protected ITreeContentProvider contentProvider;
>   public abstract boolean isChecked(Object element);
>
>  public boolean isGrayed(Object element) {
>  //Itt tudok valamit csinálni a contentProviderrel
>  return false;
>  }
>   public ICheckStateProvider withContentProvider( ITreeContentProvider
> contentProvider ) {
>  this.contentProvider = contentProvider;
>  return delegate;
>  }
>
>  protected class InnerDelegate implements ICheckStateProvider {
>
>  @Override
>  public boolean isChecked(Object element) {
>  return ContentBasedGrayingCheckStateProvider.this.isChecked(element);
>  }
>
>  @Override
>  public boolean isGrayed(Object element) {
>  return ContentBasedGrayingCheckStateProvider.this.isGrayed(element);
>  }
>  }
> }
>
>  Felhasználni így kell majd:
>
>  ITreeContentProvider cp = ...;
> new CheckboxTreeViewer(...).setCheckStateProvider( new
> ContentBasedGrayingCheckStateProvider() {
>   @Override
>  public boolean isChecked(Object element) {
>  // TODO Auto-generated method stub
>  return false;
>  }
>  }.withContentProvider(cp));
>
>  Mi a véleményetek? Nem akarok annyi nevesített osztályt gyártani. Rossz
> vagyok? Jobb ötletek van?
>
>  Gábor
>
>
>
> _______________________________________________
> Javalist mailing list
> Javalist at lists.javaforum.hu
> http://lists.javaforum.hu/mailman/listinfo/javalist
>
>
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: <http://lists.javaforum.hu/pipermail/javalist/attachments/20130131/e22e009a/attachment.html>


További információk a(z) Javalist levelezőlistáról