[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