问题描述:
在kotlin类中定义Bean,需要实现Parcelable相关代码,如果没有实现,则可以根据提示点击"Add Parcelable Implementation"自动生成代码,但是发现出现代码错误“Abstract member cannot be accessed directly”,报错的代码如下:
override fun writeToParcel(parcel: Parcel, flags: Int) {
super.writeToParcel(parcel, flags)//就是这行代码报错
parcel.writeString(appName)
parcel.writeString(userType)
parcel.writeString(describe)
parcel.writeString(downloadUrl)
}
分析问题:
因为当前这个Bean是继承了一个基类BaseBean,这是个抽象类,实现了Parcelable接口,但是并没有生成writeToParcel等相关代码,kotlin可能检测到它是继承关系,所以自动添加了“ super.writeToParcel(parcel, flags)”这行代码来回调父类的方法,但是因为检测不到父类有这个方法,所以出现这行代码时编译器就报错了,这应该是Android Studio的一个bug
解决问题:
直接把“ super.writeToParcel(parcel, flags)”这行代码删掉就可以了
问题总结:
当出现“Abstract member cannot be accessed directly”这个错误提示的时候,多半是因为父类是抽象类,而且父类没有实现相关方法,但是子类里却回调了supplier.xx()