2017-06-21 1 views
0

私は現在、次のような構造のAndroid Studioのモジュールを構築しています:アンドロイドモジュール - 変数を外部ではなくモジュール内でのみアクセス可能にするにはどうすればよいですか?

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

私はInterfaceClass.javaは、モジュール自体へのアクセスのゲートウェイ」であるとするつもり。おおよそ次のように構成されます:

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; 
    } 
} 

私の意図だけcom.example.moduleモジュールとそのすべてのパッケージの内側ではなく、モジュールの外部変数sDisplayWidthsDisplayHeightがアクセスできるようにすることです。現在の設定では、私はちょうどInterfaceClass.sDisplayWidthをどこからでも呼び出すことができるので、モジュールを使用するアプリケーションのアクティビティであっても、インスタンスのセットアップコードにのみ設定し、モジュール内でのみ使用できるようにします。

protected修飾子は、モジュールのパッケージ内でアクセスできないため終了しないと思われます。

私の質問:モジュール内でのみ変数にアクセスできるようにするにはどうすればよいですか?

編集:明確にするために、変数がpackage-privateの代わりにmodule-privateになるようにします。

+0

私は質問を誤解するかもしれませんが、変数をプライベートにする方法を尋ねていますか?もしあなたがそうであれば、パブリック修飾子を削除するだけです。 – Kuffs

答えて

0

アクセス指定を削除すると、package-privateになります。やってみて。

static int sDisplayWidth, sDisplayHeight; 
0

私はあなたの質問を理解している場合完全にあなたがそれをあるpackage-privateアクセスを提供しようとすることができ、それはモジュールのルートに居住され、したがって、外部のクラスにアクセスすることはできません場合、それはあなただけのモジュールによってアクセスされますモジュール

は、だから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

これは問題です: 'com.example.module.fragment'パッケージの中からアクセスしようとすると、「パッケージ外からアクセスできません」というエラーメッセージでコンパイルできません。 – Gensoukyou1337

+0

@ Gensoukyou1337そうですねネストされたパッケージへのアクセスを許可しません –

0

は残念ながら、それは今は不可能であることを確認するには、以下のやってみてください。新しいmodule system機能はJava 9で発表されており、遅かれ早かれAndroidに登場する可能性があります。

最も近い修飾子はpackage-privateですが、ネストされたパッケージの表示は許可されません。

+0

Java 9がAndroidに適合するまで、それをモジュールプライベートにすることはできませんか? – Gensoukyou1337

+0

残念ながら、私を信じて、私も同様に苦労しています:(あなたができる唯一のことは、パッケージプライベートアクセスが最良の方法であなたに役立つようにパッケージを整理することです –

関連する問題