gpt4 book ai didi

java - 方法签名和强制转换中的泛型?

转载 作者:行者123 更新时间:2023-12-02 01:25:11 25 4
gpt4 key购买 nike

为什么会这样?

@SuppressWarnings("unchecked")
public <T> T getResult(Class annotated) {
return (T) getResult(annotated, new HashMap<String, Object>(0));
}

编译器如何知道如何转换返回值?它在编译时无法知道它:它可以是任何东西。它每次都在运行时执行吗?

最佳答案

如果可能,泛型方法中 T 的类型是从方法调用的上下文中推断出来的。

String string = foo.getResult(Something.class);

如果无法从上下文确定 T 的类型(例如,如果结果作为参数直接传递给本身通用的方法),您可能必须指定输入您自己的内容:

List<String> list = Arrays.asList(foo.<String>getResult(Something.class));

泛型方法还可以使用它们在参数中声明的类型,这可以强制参数和结果类型一致:

public <T> T getResult(Class<T> type) { ... }

String string = foo.getResult(String.class); // ok
String string = foo.getResult(Something.class); // not ok

在运行时,泛型不存在,因此它只是尝试将结果分配给您尝试分配给的任何对象...如果它是错误的类型,您将得到一个ClassCastException

关于java - 方法签名和强制转换中的泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4228533/

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