问题产生原因概述

一个kotlin类,调用一个Java类中的一个方法。引发了下面这个错误。

因为我在kotlin中调用了了java代码中定义的一个接口,然后就报错一个IllegalAccessError错误。如下:

E/AndroidRuntime: FATAL EXCEPTION: main

Process: test.juyoufuli.com.myapplication, PID: 19866

java.lang.IllegalAccessError: Interface test.juyoufuli.com.myapplication.app.view.LabelsView$MyChildClickListener implemented by

class test.juyoufuli.com.myapplication.mvp.ui.searchview.SearchViewActivity$onResume$1 is

inaccessible (declaration of 'test.juyoufuli.com.myapplication.mvp.ui.searchview.SearchViewActivity$onResume$1' appears in /data/app/test.juyoufuli.com.myapplication-wPuFy3wI4m1ZSX5n23LKjw==/base.apk)

at java.lang.Class.newInstance(Native Method)

at android.app.Instrumentation.newActivity(Instrumentation.java:1173)

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

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

at android.app.ActivityThread.-wrap11(Unknown Source:0)

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

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

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

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

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

at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)

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

上述错误主要是说无法到达(inaccessible)该方法。google了一把,确实有人遇到这种问题,下面介绍解决问题方案。

介绍一下各个地方的code

//我在这里调用我定义的方法 (这个方法运营后触发点击事件,直接报错)

lbvSearch!!.setChildClickListener { view, string, position ->

searchHotWord(string)

}

//这么调用也可以(这个直接就报错,完全无法运行。提示如下图)

lbvSearch.setChildClickListener(object : LabelsView.ChildClickListener() {

fun onChildClick(view: View, `object`: Any, position: Int) {

searchHotWord(string)

}

})

//常规的一个点击的接口

interface MyChildClickListener {

/**

* @param view

* @param string

* @param position

* @return

*/

void onChildClick(View view, String string, int position);

}

就是以上一个很常规的调用,但是实际却不能运行。上图的提示也说的比较清楚不能使用MyChildClickListener方法。为什么不能使用呢?

这里联想到以前的一个问题。

在kotlin中使用butterknife的经历(虽然kotlin提供了自己的注解库),如下对比一下。

//java中使用

@BindView(R.id.ll_cash_tab)

LinearLayout llCashTab;

//kotlin中使用,需要添加一个新的注解,注解的意思就说设置这个参数为public的

@JvmField// * Instructs the Kotlin compiler not to generate getters/setters for this property and expose it as a field.

@BindView(R.id.et_search_word)

internal var etSearchWord: EditText? = null

说了这么多是不是突然明白了什么?

其实就说我们的Java中默认的方法和变量默认是protected的修饰,但是kotlin中却无法调用protected修饰的方法。

没错,你只需要在interface前面加上public的修饰符就好了

说了一大堆就为了这一个修饰符,因为对kotlin中的特性了解不充分导致。后续持续中会不断总结记录。

你的鼓励,是我前进的动力。

this all

java类无法调用值,Kotlin无法调用到Java中定义的interface类的问题记录相关推荐

  1. c++语言程序中,要调用的函数必须在main()函数中定义,惠州学院C++考试复习题

    惠州学院C++复习题 一.选择题 1.C++的源文件的扩展名是_____C____. A.h B.obj C.cpp D.exe 2.下列选项能够作为C++变量名的是___C____. A.false ...

  2. java编译类代码_Java的源代码中定义几个类,编译结果就生成几个以“.class”后缀的字节码。...

    [填空题]一个类实现某个接口时必须实现接口中声明的所有方法,否则该类必须定义为(__); [单选题]若有定义int a = 2;则执行完语句a += a -= a * a; 后,a的值是( ) [填空 ...

  3. java矩形派生正方形_src Step1: 为实验3中定义的矩形类派生一个子类:正方形类 - 下载 - 搜珍网...

    Step1: 为实验3中定义的矩形类派生一个子类:正方形类.正方形类的操作同样是求周长和面积.则这个子类除了从父类继承来的方法之外,还需要定义哪些方法?列出正方形类的所有域与方法.编程验证所编写的正方 ...

  4. 以小组为单位,设计一个Windows应用程序,在该程序中定义一个学生类和班级类,以处理学生的学号,姓名,语文,数学和英语3门课程的期末考试成绩。

    设计一个Windows应用程序,在该程序中定义一个学生类和班级类,以处理学生的学号,姓名,语文,数学和英语3门课程的期末考试成绩. 实现如下要求的功能: 1.根据姓名查询该学生的总成绩: 2.统计全班 ...

  5. 【水汐のC#】计一个Windows应用程序,在该程序中定义一个学生类和班级类,以处理学生的学号,姓名,语文,数学和英语3门课程的期末考试成绩。实现如下要求的功能:

    设计一个Windows应用程序,在该程序中定义一个学生类和班级类,以处理学生的学号,姓名,语文,数学和英语3门课程的期末考试成绩.实现如下要求的功能: 根据姓名查询该学生的总成绩: 统计全班学生总分的 ...

  6. 将Frock类声明为抽象类,尺寸在Frock类中定义,在类中声明抽象方法calcArea方法,用来计算衣服的布料面积。

    将Frock类声明为抽象类,尺寸在Frock类中定义,在类中声明抽象方法calcArea方法,用来计算衣服的布料面积. 编写Shirt类继承Frock类,实现 calcArea方法,用来计算衬衣所需的 ...

  7. 【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )

    文章目录 总结 一.接口中定义 call() 方法 二.类中定义 call() 方法 三.完整代码示例 总结 在 实例对象后使用 " () " 括号符号 , 表示调用该实例对象的 ...

  8. java怎么快速创建监听类_java_利用java监听器实现在线人数统计,1.在工程中创建监听类SessionLi - phpStudy...

    利用java监听器实现在线人数统计 1.在工程中创建监听类SessionListener 并且实现HttpSessionListener接口,代码如下 import javax.servlet.htt ...

  9. python 类中定义列表_Python-从类定义中的列表理解访问类变量

    小编典典 类范围和列表,集合或字典的理解以及生成器表达式不混合. 为什么:或者,官方用词 在Python 3中,为列表理解赋予了它们自己的适当范围(本地名称空间),以防止其局部变量渗入周围的范围内(即 ...

最新文章

  1. rotate.js实现图片旋转 (chrome,IE,firefox都可以实现)
  2. vscode工作区是什么意思_空压机的容积流量和工作压力是什么意思?
  3. 小程序商店刷榜_APP推广人必看|全球刷榜价格表单
  4. javascript无提示关闭窗口,兼容IE,Firefox
  5. python在材料方面的应用_Python数据科学(一)- python与数据科学应用(Ⅰ)
  6. 求函数:x的n次方(函数递归)
  7. mesos安装--软件源安装
  8. 实用经验 92 区分函数模版与模版函数,类模版和模板类
  9. windows 下命令行查看CPU负载
  10. java自动转换与强制转换
  11. Asterisk 是什么?
  12. 举个栗子~Tableau 技巧(244):用和弦图(Chord diagram)呈现数据关系
  13. 会声会影2022智能、快速、简单的视频剪辑软件
  14. 仙气满满的霍尊竟然这么皮?自爆体重已经突破……
  15. 半年巨亏10亿,水滴烧钱枯竭硬伤难愈
  16. IDL 初学教程(一)
  17. 如何白嫖微软云Azure12个月及避坑指南
  18. 看优酷 Node 重构之路,Serverless SSR 未来可期
  19. python编译程序输入上网时间并计算上网费用 计算方法_同济大学Python程序设计基础 实验三:选择结构...
  20. CentOS7安装harbor仓库

热门文章

  1. Python使用Apriori算法分析导演请某演员后还会请哪个演员
  2. python批量复制粘贴_用python批量复制特定图片
  3. 计算机系统一级免费,计算机系统一级ms_office课件第一章.pptx
  4. 空调万能手机遥控器android版,手机空调万能遥控器
  5. 计算机二级知识点速记,计算机等考《二级MS+Office高级应用》高频考点速记
  6. java如何用反射把具体方法抽象_如何在Java 中使用泛型或反射机制对DAO进行抽象...
  7. java异步处理_Java编程开发好入门吗 消息队列的用途有哪些
  8. leetcode刷题:除自身以外数组的乘积
  9. 计算机科学与量子信息处理,量子计算交叉学科
  10. 先查询后修改并发的时候sql_SQL调优总结