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

István Székely istvan.szekely at i-logic.hu
2013. Jan. 31., Cs, 13:59:52 CET


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
>

--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: <http://lists.javaforum.hu/pipermail/javalist/attachments/20130131/5d5e4133/attachment.html>


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