2017-06-21 2 views
0

Ich bin ein Android-Studio-Modul zur Zeit im Aufbau wie folgt strukturiert:android modules - Wie mache ich eine Variable nur innerhalb des Moduls zugänglich und nicht außerhalb?

com.example.module 
+--- .activity 
+--- .adapter 
+--- .fragment 
+--- etc. package names 
+--- .view 
+--- InterfaceClass.java 

ich die InterfaceClass.java machen will das ‚Tor des Zugangs‘ zu sein in das Modul selbst. Es ist ungefähr so ​​strukturiert:

public class InterfaceClass 
{ 
    private static InterfaceClass instance; 
    private static AppCompatActivity starterAct; 
    public static int sDisplayWidth, sDisplayHeight; 

    public static InterfaceClass getInstance() { 
     if (instance == null) { 
      synchronized (InterfaceClass.class) { 
       if (instance == null) { 
        instance = new InterfaceClass(); 
       } 
      } 
     } 
     return instance; 
    } 

    public void setup(AppCompatActivity starterAct) { 
     this.starterAct = starterAct; 
     this.updateScreenSize() 
    } 

    ... 

    private void updateScreenSize() { 
     WindowManager wm = (WindowManager) this.starterAct.getSystemService(WINDOW_SERVICE); 
     Display display = wm.getDefaultDisplay(); 

     Point size = new Point(); 
     display.getSize(size); 
     sDisplayWidth = size.x; 
     sDisplayHeight = size.y; 
    } 
} 

Meine Absicht ist es, die Variablen sDisplayWidth und sDisplayHeight zugänglich nur innerhalb des com.example.module Modul und alle Pakete, die nicht außerhalb des Moduls zu machen. Weil ich mit dem aktuellen Setup einfach InterfaceClass.sDisplayWidth von überall aufrufen oder einstellen kann, sogar in der Aktivität der App, die das Modul verwendet, und ich möchte, dass es nur im Setup-Code der Instanz eingerichtet wird und nur innerhalb des Moduls verwendbar ist.

Ich glaube nicht, dass der Modifikator protected entweder funktioniert, weil es nicht innerhalb der Pakete des Moduls zugänglich ist.

Meine Frage: Wie genau mache ich die Variable nur innerhalb des Moduls zugänglich?

EDIT: Um zu klären, anstelle der Variablen package-private, ich möchte es module-private sein.

+0

Ich könnte die Frage missverstehen, aber fragen Sie, wie man ein variables Paket-privat macht? Wenn dies der Fall ist, entfernen Sie einfach den öffentlichen Modifikator. – Kuffs

Antwort

0

Durch Entfernen des Zugriffsspezifizers wird package-private erreicht. Versuch es.

static int sDisplayWidth, sDisplayHeight; 
0

Wenn ich Ihre Frage vollkommen verstanden könnte man ihm package-private Zugang versuchen zu geben, das heißt, es wird nur durch das Modul zugegriffen werden, wenn es in der Wurzel des Moduls mit Wohnsitz und wird daher nicht außerhalb Klassen zugänglich sein das Modul

es package-private

public class InterfaceClass { 

private static InterfaceClass instance; 
private static AppCompatActivity starterAct; 
static int sDisplayWidth, sDisplayHeight; 

public static InterfaceClass getInstance() { 
    if (instance == null) { 
     synchronized (InterfaceClass.class) { 
      if (instance == null) { 
       instance = new InterfaceClass(); 
      } 
     } 
    } 
    return instance; 
} 

public void setup(AppCompatActivity starterAct) { 
    this.starterAct = starterAct; 
    this.updateScreenSize() 
} 

... 

private void updateScreenSize() { 
    WindowManager wm = (WindowManager) 
     this.starterAct.getSystemService(WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 

    Point size = new Point(); 
    display.getSize(size); 
    sDisplayWidth = size.x; 
    sDisplayHeight = size.y; 
} 
} 
+0

Hier ist die Sache: wenn ich versuche, es aus dem 'com.example.module.fragment'-Paket zuzugreifen, kann es nicht mit der Fehlermeldung kompilieren:" Zugriff von außerhalb des Pakets nicht möglich ". – Gensoukyou1337

+0

@ Gensoukyou1337 Ja, es gibt keinen Zugriff auf das verschachtelte Paket –

0

Leider tun unten So versuchen zu machen, ist es jetzt nicht möglich ist. Die neue Funktion module system wurde in Java 9 angekündigt und könnte früher oder später zu Android kommen.

Der nächste Modifikator ist package-private, aber die Sichtbarkeit der verschachtelten Pakete wird nicht gewährt.

+0

Also, bis Java 9 für Android angepasst ist, ist es nicht möglich, es Modul-private machen? – Gensoukyou1337

+0

Leider nicht. Glauben Sie mir, ich kämpfe auch :(Das einzige, was Sie tun können - organisieren Sie Ihre Pakete in einer Weise, dass 'package-private' Zugriff Ihnen auf die beste Weise dienen wird –

Verwandte Themen