gpt4 book ai didi

java - 关于Java泛型的一些问题

转载 作者:行者123 更新时间:2023-12-04 05:21:38 26 4
gpt4 key购买 nike

假设我有以下接口(interface)和实现类:

interface Foo<FooType extends Foo<FooType>> {
FooType copy();
}

class Bar implements Foo<Bar> {
public Bar copy() {
return new Bar();
}
}

如果我尝试这样做:
public <FooType extends Foo<FooType>> FooType getFoo() {
return new Bar();
}

我收到编译错误“类型不匹配:无法从 Bar 转换为 FooType”。 为什么?

我可以通过重写这样的函数来“修复”这个问题:
@SuppressWarnings("unchecked")
public <FooType extends Foo<FooType>> FooType getFoo() {
return (FooType) new Bar();
}

但是假设我有这样的功能:
public <FooType extends Foo<FooType>> void printFoo(FooType foo) {
System.out.println(foo.toString());
}

如果我尝试这样做:
printFoo(getFoo());

我收到以下编译错误:
Bound mismatch: The generic method printFoo(FooType) is not applicable 
for the arguments (Foo<Foo<FooType>>). The inferred type Foo<Foo<FooType>>
is not a valid substitute for the bounded parameter <FooType extends Foo<FooType>>

笏? getFoo() 的返回类型实际上与 printFoo() 的参数类型相同!

这些错误还是我错过了什么?

最佳答案

问题是 FooType可以是任何东西,而不仅仅是 Bar .您可以返回 FooType 的实例.

例如如果你有 class NotBar implements Foo<NotBar> {然后

 obj.<NotBar>getFoo();

现在 FooType 的实际参数是 NotBar .

关于java - 关于Java泛型的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13633352/

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