2016-11-14 23 views
0

這是一個java問題而不是android問題。如果我們看一下下面的代碼,我需要從我的主類訪問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'的靜態實例,然後使用getter來檢索它。這一切都取決於你的需求。 – Zircon

+0

而且這些代碼都不能改變,因爲它是圖書館的一部分 –

回答

1

Proxy被聲明爲私人類。要從外部訪問它,它需要publicprotected或默認(程序包專用),具體取決於您想從中訪問它的位置。

+0

好吧,如果它是公開的,我怎麼能訪問它呢? –

+0

然後您只需調用代理對象實例的方法即可。 – Thiefster

+1

'import whatever.packagename.IAirWatchSDKService.Stub.Proxy;',然後將其稱爲'Proxy'。 –

0

最好的做法是,如果你的主類需要運行這個方法,它應該實現接口。那麼,或者主類通過如下方法知道接口:myIAirWatchSDKService.getEnrollmentUsername(s)