gpt4 book ai didi

java - 如何执行检查类型转换?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:50:39 25 4
gpt4 key购买 nike

我是泛型的新手,遇到了问题。

考虑以下代码:

public class A {}
public class B extends A {}

public <T extends A> T getB()
{
A test = new B();
Class<B> clazz = B.class;
if (clazz.isInstance(test))
{
return (T)test;
}
return null;
}

这会生成一个未检查的转换警告。在 return (T)test; 行。但显然我正在使用 if (clazz.isInstance(test)) 行检查类型。

有没有办法进行“检查转换”?

我不希望只是抑制警告,而是实际实现检查转换。遗憾的是,我找不到有关如何执行检查转换的信息。

最佳答案

Is there a way to do a "checked cast"?

当然可以,但需要注意的是它真的对您没有帮助,因为您的方法在一些地方被硬编码为使用 B。您可以执行转换:

clazz.cast(test)

...但这将转换为 B,而不是 T。特别是,假设我跑了:

public class C extends A {}

...

C c = foo.<C>getB();

您希望它如何工作?

您可能希望将代码更改为:

public <T extends A> T getB(Class<T> clazz)
{
A test = // get A from somewhere
return clazz.isInstance(test) ? clazz.cast(test) : null;
}

那没关系,因为 clazz.cast 将返回类型为 T 的值,您可以返回它。

关于java - 如何执行检查类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26022518/

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