[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