作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么会这样?
@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/
我是一名优秀的程序员,十分优秀!