我有一些结构如下的类:

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 param)

void func(A.B param)
但是我不想这样做,因为我想使用Asub.B中定义的一些替代功能,但是如果我将param类型更改为A.B而不是B,则短绒棉绒告诉我Asub.B未使用

如果能解决此问题,我将不胜感激;如果无法解决,请提供一种可能的替代方法来实现我想要的功能

这个问题的实际背景与Android的RecyclerView.AdapterViewHolder有关,但我认为问题不存在于此

最佳答案

我相信这里最好的选择是使用泛型。

遵循以下原则

abstract class A<T extends A.B> {
    class B {
      // ...
    }

    abstract void func(T param) {
      //..
    }
}

class Asub<Asub.B> extends A {
    class B extends A.B {
      // ...
    }


    @Override
    void func(Asub.B param) {
      // ...
    }
}

应该应该做的工作。

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

10-09 04:04