我在用通用抽象类扩展内部类时遇到问题。
我得到一个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完成。
感谢您的帮助!
答案 0 :(得分:0)
您在类中定义的字段没有显式访问修饰符,该修饰符将使用默认访问修饰符并将可见性限制在同一包中的类。
您应将AbstractBar
中的字段设置为protected
-
public abstract class AbstractBar<T> {
protected int someNumber;
}