如果您有一个带签名的方法:
Class<? extends List<String>> getObjectType()
{
return ?????;
}
Run Code Online (Sandbox Code Playgroud)
如何返回List类的正确通用版本?
return List.class; //errors
return List<String>.class; //errors
return List.class<String>; //errors
Run Code Online (Sandbox Code Playgroud)
处理这个问题的正确语法是什么?
Joh*_*her 10
您需要将其显式转换为返回类型.这有效:
return (Class<? extends List<String>>) List.class;
Run Code Online (Sandbox Code Playgroud)
是的它只是看起来不对劲.这只是Java的泛型系统乱七八糟的原因之一.
从"Effective Java"一书(第二版,第137页):"不要使用通配符类型作为返回类型.它不会为用户提供额外的灵活性,而是迫使他们在客户端代码中使用通配符类型."
也就是说,要进行强制转换,首先必须创建一个临时变量:
@SuppressWarnings("unchecked")
Class<? extends List<String>> result = ....;
return result;
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为您可以在作业上注释.它return本身不起作用.您也可以将其添加到方法中,但这也会隐藏其他问题.
| 归档时间: |
|
| 查看次数: |
7332 次 |
| 最近记录: |