gpt4 book ai didi

扩展类的 Java 泛型未检查警告

转载 作者:行者123 更新时间:2023-11-29 03:39:29 24 4
gpt4 key购买 nike

我有以下代码:

public class Foo {

interface Coo<T> {
public T cool();
}

abstract class Bar<T extends Bar<T>> implements Coo<T> {

@SuppressWarnings("unchecked")
T doSomething() {
return (T) this;
}

@SuppressWarnings("unchecked")
@Override
public T cool() {
return (T) this;
}

}

class FooBar extends Bar<FooBar> {
@Override
public FooBar cool() {
return super.cool();
}

}
}

为什么转换为 (this) 对象类型不安全? Bar 实现 Coo 时,不是泛型说返回的 cool 必须是 T 类型,它扩展了 Bar 或其子类吗?

最佳答案

因为 thisBar类型为 Bar<T extends Bar<T>>但不是 T ,编译器为 Bar#doSomething 生成警告.以下不会产生任何警告:

abstract class Bar<T extends Bar<T>> {

Bar<T> doSomething() {
return this;
}

}

Bar#cool的主体期待 this成为 T 的子类型事实并非如此。在 Bar#cool , this类型为 Bar<T extends Bar<T>>并且是 Coo<T> 的子类型但不是 T .

关于扩展类的 Java 泛型未检查警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13811964/

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