我有一些类(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.Adapter
和 ViewHolder
有关,但我不认为问题出在此处
最佳答案
这与内部类无关,这里的问题是你不能用 f(B extends A) 重写函数 f(A),因为所有重写的方法都必须能够接受所有允许的参数对于 super 方法。
当然,您始终可以在重写方法中强制转换为子类型。
关于java - 方法的参数类型对应于扩展 super 内部类的内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48829122/