gpt4 book ai didi

Java从内部接口(interface)访问外部类的泛型参数

转载 作者:搜寻专家 更新时间:2023-11-01 01:23:21 24 4
gpt4 key购买 nike

考虑代码:

public class A<T extends X> {
public static interface Delegate {
void doMagic(T t); // why can't I access "T" here?
}

public A(Delegate delegate) { ... }
}
...
public class TheDelegate implements A<Y> { ... }
...
A<Y> a = new A<Y>(new A<Y>.Delegate() {
@Override
public void doMagic(Y y) {
...
}
});

为什么我不能从Delegate接口(interface)访问T

最佳答案

这是因为你的内部界面是静态的。通用参数仅适用于 A 的实例,而不适用于类,因此 T 的范围是 A 的非静态范围。

如果您不知道,Java 中的所有接口(interface)和枚举都是静态的,即使它们没有声明为静态的并且位于另一个类中。因此,无法通过接口(interface)解决此问题。

See this answer also.

编辑:史蒂文的回答是正确的。但是,您的用户代码将如下所示:

// Note the extra declaration of the generic type on the Delegate.
A<Integer> a = new A<Integer>(new A.Delegate<Integer>() {
@Override
public Integer myMethod() {
return null;
}
});

关于Java从内部接口(interface)访问外部类的泛型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7885736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com