将泛型类扩展为静态内部类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将泛型类扩展为静态内部类相关的知识,希望对你有一定的参考价值。
我在使用泛型抽象类扩展内部类时遇到问题。
我得到一个奇怪的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上完成的。
谢谢您的帮助!
答案
类中定义的字段没有显式访问修饰符,该修饰符将使用默认访问修饰符并限制对同一包中的类的可见性。
您应该将AbstractBar
中的字段设为protected
-
public abstract class AbstractBar<T> {
protected int someNumber;
}
以上是关于将泛型类扩展为静态内部类的主要内容,如果未能解决你的问题,请参考以下文章
在没有泛型类约束的情况下,将泛型类型与其默认值进行比较,会产生编译时错误