2016-11-14 18 views
0

これはアンドロイドの質問ではなく、Javaの質問のほうが多いです。私たちは以下のコードを見れば、私は私のメインクラスからgetEnrollmentUsernameにアクセスする必要があります。インタフェース内の抽象クラスにアクセスする方法

public interface IAirWatchSDKService extends android.os.IInterface { 

    public String getEnrollmentUsername(String publicKey); 

    public abstract static class Stub extends Binder implements IAirWatchSDKService { 

     private static class Proxy implements IAirWatchSDKService { 
      @Override 
      public IBinder asBinder() { 
       return null; 
      } 

      public String getEnrollmentUsername(String publicKey){ 

       return "it worked"; 
      } 
     } 
    } 
} 

が、問題は、それが抽象クラスの内にラップされていることです。どのように私のメインクラスからそれを得ることができますか?このコードはライブラリの一部であるため変更できません。メインクラスのコードを書く必要があります。

+0

メインクラスが表示される場所に応じて、クラスを表示する必要があります。公開 - 非公開ではありません。 –

+0

内部クラスが 'private'なので、できません。 'Stub'クラスに' Proxy'の 'static'インスタンスを作成し、それを取得するためにゲッターを使うことができます。それはあなたの必要に応じて決まります。 – Zircon

+0

このコードはライブラリの一部であるため変更できません –

答えて

1

Proxyはプライベートクラスとして宣言されています。外からアクセスするには、どこからアクセスするかによって、publicprotectedまたはデフォルト(パッケージプライベート)が必要です。

+0

これは公開されていればどのようにアクセスできますか? –

+0

これで、Proxyオブジェクトのインスタンスでメソッドを呼び出すことができます。 – Thiefster

+1

'import whatever.packagename.IAirWatchSDKService.Stub.Proxy;'は、それを 'Proxy'と呼んでいます。 –

0

メインクラスがこのメソッドを実行する必要がある場合は、インターフェイスを実装することをお勧めします。メインクラスは、次のようなメソッドを使ってインターフェイスを認識しています。myIAirWatchSDKService.getEnrollmentUsername(s)

関連する問題