2017-12-11 5 views
0

Hallo Ich habe ziemlich komplexe Anwendung erfordert Klassifizieren von „Activity“, „Service“ und „FragmentActivity“ in Android (aber diese Frage ist nach wie vor gültig in reinen Java als auch)Wie teile ich Code zwischen verschiedenen Klassen?

enter image description here

die 3 Jede Klassen wird erweitert mit einer Reihe von Dienstprogrammen in "Meine Ebene" z eine spezifische Methode, um einen Toast anzuzeigen oder eine bestimmte Methode, um eine Konfiguration zu handhaben oder Dateien auf der Festplatte usw. zu lesen.

Jetzt habe ich eine gemeinsame Schnittstelle (MyUtilities) für alle 3 Arten von Klassen, z.

public class MyActivity extends Activity implements MyUtilities 
    public class MyFragmentActivity extends FragmentActivity implements MyUtilities 
    public class MyService extends Service implements MyUtilities 


    public class MyActivity1 extends MyActivity 
    public class MyFragmentActivity1 extends MyFragmentActivity 
    public class MyService1 extends MyService 

aber das macht mich zu kopieren beenden und gemeinsame Methoden für alle drei Klassen einfügen, da ich nicht Felder und Methoden in der Schnittstelle definieren. Gibt es einen besseren Weg, das zu tun? Kopiercode ist auf lange Sicht extrem fehleranfällig.

Ich schaute auf abstrakte Klassen, aber nicht sicher, wie man sie in diesem Fall verwendet. Im Idealfall, was ich brauche es eine „doppelte erweitern“ wie

public class MyActivity extends Activity, MyUtilities 

was natürlich nicht erlaubt, aber das würde mein Problem lösen.

Ideen bitte?

Danke!

PS: Ich bin bereits statische Methoden auf gemeinsame Klassen, wo immer möglich

Als here'a angefordert, ein einfaches Beispiel. Jede der drei Objekte müssen in der Lage, ein Konfigurationsfeld zu unterstützen und jede enthält die folgenden

private Configuration config 

public Configuration getConfiguration(){return config;} 

public void setConfiguration(Configuration cfg){this.config=cfg;} 

Möchten Sie eine Schnittstelle hilft bei der erfordert, dass die Methoden gibt es, aber ich muss noch kopieren und Einfügen von Code, die ich don nicht wirklich.

+0

Bitte teilen Sie mehr Code, ist die Antwort nur Logik in einer getrennten Klasse Methode extrahieren. Für eine bessere Hilfe teilen Sie Ihren Code jedoch. – Ele

+0

Danke, ich fügte ein einfaches Beispiel in den Haupttext – Lele

Antwort

0

Werfen Sie einen Blick auf diesen Ansatz:

Die Idee ist, Ihre Custom Activity Klasse zu erstellen, wird Activity und implementiert MyUtilities-Schnittstelle erweitert. Auf diese Weise versteht die Android-Ebene Ihre benutzerdefinierte Klasse als Aktivität und Ihre Ebene als MyActivity sowie MyUtilities.

public class CustomActivity extends Activity implements MyUtilities { 
    private Configuration config 

    public Configuration getConfiguration(){return config;} 

    public void setConfiguration(Configuration cfg){this.config=cfg;} 
} 

Android-Layer werden die Instanzen der Klasse MyActivity als Activity verstehen.

Ihre Schicht versteht die Instanzen der Klasse MyActivity als CustomActivity sowie MyUtilities.

public class MyActivity extends CustomActivity { 

} 

Hoffe, das hilft!

+0

Danke, Das Problem, das ich dabei habe, ist, wenn ich versuche, das gleiche für z.ein Service, der CustomActivity in diesem Fall nicht erweitern kann. Oder verpasse ich etwas daran? – Lele

+0

vielleicht können Sie ein Dekorateurmuster versuchen? –

Verwandte Themen