【问题标题】:Why can't I use generics in an inner interface?为什么我不能在内部接口中使用泛型?
【发布时间】:2014-12-18 18:03:55
【问题描述】:

我尝试编译以下代码:

public interface Foo<T> {
    public interface Bar {
        public void bar(T t);
    }

    void foo(T t);
}

但我收到此错误:“Foo.this 无法从静态上下文中引用。”

具体来说,我在 bar(T t) 中的“T”上得到它。但是 foo(T t) 不会产生相同的错误。我不明白为什么这是一个静态上下文以及错误的真正含义。

【问题讨论】:

  • public interface Bar&lt;T&gt; {
  • @brso05 这将重新定义 T 而不是重用它,因此 T 可能具有不同的值,我认为这不是 OP 想要的。
  • @Thomas 除非你用同一个类重新定义它...
  • @BarryFruitman 我可能会为内部T 使用不同的名称,以便您看到编译器看到的差异。隐藏外部T 可能会导致难以跟踪的错误。

标签: java static


【解决方案1】:

“嵌套”接口(在您的示例中为 Bar)是隐式静态的。因此它无法访问与 Foo 相关的实例特定信息,例如它的泛型类型。

例如见JLS #8.5.1:

成员接口是隐式静态的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2013-09-20
    • 1970-01-01
    • 2015-03-18
    • 2022-01-21
    • 1970-01-01
    • 2021-11-10
    相关资源
    最近更新 更多