2016-11-14 52 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)