将泛型类扩展为静态内部类

时间:2018-07-08 20:33:32

标签: java android inheritance

我在用通用抽象类扩展内部类时遇到问题。

我得到一个Non-static field cannot be referenced from a static context很奇怪,因为类本身是静态的,不一定是字段值。

这基本上就是我所拥有的:

// AbstractFoo.java
public abstract class AbstractFoo extends FrameLayout {
    // Some logic
}

// AbstractBar.java
public abstract class AbstractBar<T> {
    int someNumber;
    // Some logic
}

// Foo.java
public class Foo extends AbstractFoo {
    // Some logic

    // Foo.InnerFoo.java
    public static class InnerFoo extends AbstractBar<InnerFoo> {
        public InnerFoo() {
            super.someNumber = 5; // Compiler error HERE
        }
    }
}

由于某些原因,我无法从someNumber访问InnerFoo。据我了解,这应该不会造成任何问题。我要扩展的类来自外部库。

这也可以通过最低SDK为24的Android完成。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您在类中定义的字段没有显式访问修饰符,该修饰符将使用默认访问修饰符并将可见性限制在同一包中的类。

您应将AbstractBar中的字段设置为protected-

public abstract class AbstractBar<T> {
    protected int someNumber;
}