Was will mir Lint sagen? "failure of abstraction"

  • Antworten:1
pepperonas
  • Forum-Beiträge: 434

15.11.2014, 16:48:48 via Website

Hallo,
ich habe gerade mal Lint über mein Projekt laufen lassen und die ein oder andere Warning erhalten. Soweit konnte ich alle Warnungen nachvollziehen und teilweise machte es auch Sinn diese zu beheben... Aus einer Warnung werde ich nicht Schlau.

Sie lautet wie folgt:

Reports any instance fields whose type is declared to be a concrete
class, rather than an interface. Such declarations may represent a
failure of abstraction, and may make testing more difficult.
Declarations whose classes come from system or third-party libraries
will not be reported by this inspection.

Sie wird mir an der Stelle angezeigt, in der ich ein (wie hätte es anders sein können?^^) Fragment in meiner MainActivity als Field deklariere.

Jetzt stellt sich mir die Frage "schwerwiegender Stilbruch oder alltägliche Warnung, die vernachlässigt werden kann?"

Besten Danke vorab und viele Grüße
Martin

Open Source

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

16.11.2014, 09:49:30 via Website

Du solltest dich halt fragen wieso du eine Referenz auf ein Fragment brauchst? Das ist definitiv ein Code Smell in meinen Augen. Betrachte Fragments als eine art Werkzeug das du wiederverwenden kannst. Dann kann das Framwork auch den state wiederherstellen ohne das du dir "ins knie schiessen" musst.

Gewöhnlich übergebe Ich dem Fragment was es braucht um autark sein zu können :

    final AFragment fragment = AFragment.newInstance(parameter,parameter2);
    fragment.show(getFragmentManager(),AFragment.TAG);

Ob das nun ein DialogFragment wie hier oder ein normales ist, spielt dabei ja keine Rolle. Siehe zu das alle parameter parcelable sind und du bleibst flexibel.

Für IO nutzten alle Fragments halt was sich brauchen, sowas lasse ich nie eine Activity machen, was konkret ich benutzt kommt sehr stark auf den Fall drauf an.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten