android接口继承关系,Android中Module之间接口调用发现不了继承关系解决方案

最近发现一个奇怪的问题,特此记录一下,为了场景重现我写了一个比较简单Demo:

有两个Module,并且都只有一个类

Module1:

public class ModuleOneEntrance {

public ModuleOneEntrance() {

}

public static void init(FragmentActivity fragmentActivity) {

ModuleTwoEntrance.init(fragmentActivity);

System.out.print("module one init");

}

}

Module2:

public class ModuleTwoEntrance {

public ModuleTwoEntrance() {

}

public static void init(Activity activity) {

System.out.print("module two init from " + activity.getComponentName());

}

}

可以看出来Module1依赖于Module2的init,但是参数对象是继承关系,按照道理说这样写应该没有什么问题,但是在模块之间这样写就会出现方法签名找不到. 我们继续来看看主工程的调用

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ModuleOneEntrance.init(this);

}

}

主工程很简单,直接就是ModuleOneEntrance.init(this),接下来运行就会报

08-05 11:37:48.711 8357-8357/? E/AndroidRuntime: FATAL EXCEPTION: main

Process: com.example.huangli.moduledepdemo3, PID: 8357

java.lang.NoSuchMethodError: No static method init(Landroid/support/v4/app/FragmentActivity;)V in class Lcom/example/module2/ModuleTwoEntrance; or its super classes (declaration of 'com.example.module2.ModuleTwoEntrance' appears in /data/app/com.example.huangli.moduledepdemo3-1/split_lib_dependencies_apk.apk)

at com.example.module1.ModuleOneEntrance.init(ModuleOneEntrance.java:15)

at com.example.huangli.moduledepdemo3.MainActivity.onCreate(MainActivity.java:14)

at android.app.Activity.performCreate(Activity.java:6237)

at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)

at android.app.ActivityThread.-wrap11(ActivityThread.java)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:148)

at android.app.ActivityThread.main(ActivityThread.java:5417)

at java.lang.reflect.Method.invoke(Native Method)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

这错误的意思很明确说是在ModuleTwoEntrance里面找不到init(FragmentActivity fragmentActivity),但是ModuleTwoEntrance明明有init(Activity activity)方法,FragmentActivity是Activity的子类。这里只能说明模块之间的方法调用是没有多态性,它找不到继承关系,要解决这个问题只能使用方法的重载.

最后

在现在这个金三银四的面试季,我自己在网上也搜集了很多资料做成了文档和架构视频资料免费分享给大家【包括高级UI、性能优化、架构师课程、NDK、Kotlin、混合式开发(ReactNative+Weex)、Flutter等架构技术资料】,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

资料获取方式:加入Android架构交流QQ群聊:513088520 ,进群即领取资料!!!

点击链接加入群聊【Android移动架构总群】:加入群聊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值