gpt4 book ai didi

java - 对构造函数的一般限制

转载 作者:行者123 更新时间:2023-11-30 09:47:31 25 4
gpt4 key购买 nike

为什么下面的代码无法编译?有什么想法吗?

public class A<TT extends B<?>> extends C<TT> implements D<TT> {

protected A(Class<TT> c) {
super(c);
}

}

interface B<MM> {

}

interface D<MM extends B<?>> {

}

abstract class C<TT> {
protected C(Class<TT> c) {

}
}

class F implements B<String> {

}

class G extends F {

}

class E<TT extends B<String>> {
public E() {
// why does this not work?
// Error: The constructor A<TT>(Class<G>) is undefined
D<TT> d = new A<TT>(G.class);

}
}

最佳答案

简单:G.classClass<G> - 不是 Class<TT> .

这个有效:

D<G> d = new A<G>(G.class);

...但您不知道 TT 的类型(在 E 中)所以你不能提供相关的 Class<TT>实例到 A<TT>构造函数。这也可以编译,但可能不是您想要的:

// Oops - we don't really have TT.class, and can't refer to it...
D<TT> d = new A<TT>(null);

假设我们尝试使用您当前的代码,并且:

class H extends B<String> {}

那么构造一个 E<H> 是完全合理的, 但你会试图通过 G.classA<H> 的构造函数- 这显然不是同一类型。

(作为旁注,使这些示例尽可能简单确实很有帮助。这意味着摆脱所有不相关的类,并为清楚起见避免重复使用类型参数名称。)

关于java - 对构造函数的一般限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6636327/

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