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

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;
}

以上是关于将泛型类扩展为静态内部类的主要内容,如果未能解决你的问题,请参考以下文章

在没有泛型类约束的情况下,将泛型类型与其默认值进行比较,会产生编译时错误

Kotlin 泛型中的 in 和 out

将泛型值推送到 Typescript 中泛型类中的泛型列表

Java 泛型泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )

Java泛型知识总结篇

是否可以使用 .NET 泛型类实现 COM 接口?