java - 方法的参数类型对应于扩展 super 内部类的内部类

标签 java android kotlin

我有一些类(class)结构如下:

class A {
    inner class B {}

    void func(B param) {}
}

class Asub extends A {
    inner class B extends A.B {}

    @Override
    void func(B param) {}      // problematic line
}

但是编译器不允许将其作为适当的覆盖,并且仅在我进行更改时才允许它(在 Asub 中)

void func(B 参数)

void func(A.B 参数)

但是我不想这样做,因为我在 Asub.B 中定义了一些重写功能,我想使用它们,但如果我更改 param 类型到 A.B 而不是 B,linter 告诉我 Asub.B 未使用

如果能帮助我解决此问题,我将不胜感激,或者如果不可能,请提供一种可能的替代方法来完成我想要的功能

这个问题的实际上下文与 Android RecyclerView.AdapterViewHolder 有关,但我不认为问题出在此处

最佳答案

这与内部类无关,这里的问题是你不能用 f(B extends A) 重写函数 f(A),因为所有重写的方法都必须能够接受所有允许的参数对于 super 方法。

当然,您始终可以在重写方法中强制转换为子类型。

关于java - 方法的参数类型对应于扩展 super 内部类的内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48829122/

相关文章:

安卓 : Does viewmodelscope cancel all jobs on detach from window of fragment

java - xml 的有效 xs 类型是什么 - 无效的 xml 字符

java - 如何在不修改现有代码的情况下识别方法执行期间访问或更改的字段?

android - ALPHA_8 位图和 getPixel

android - 创建apk时如何对AndroidManifest.xml进行编码

android - 如果 ScrollView 在顶部,如何隐藏 View ?

kotlin - 切换到 Kotlin 1.3.30 仅在 Android API 21 上中断 hashCode

java - 我是否需要多个媒体播放器来播放多个媒体文件?

java - 在线java编译显示这样的错误

android - 如何使用回调检测穿戴式/手持式 Android 设备是断开连接还是连接?