我最近在重构代码时遇到了这个问题:
下面的方法“getList()”具有参数化的返回类型.在此之下,我已经设置了三种尝试隐式绑定< T>的方法.到.
我无法弄清楚为什么前两个编译和运行正确,而第三个(bindViaMethodInvocation)甚至不会编译.
有线索吗?
在StackOverflow上寻找类似的问题时,我遇到了这个问题:
Inferred wildcard generics in return type.那里的答案(信用证Laurence Gonsalves)有几个有用的参考链接来解释应该发生的事情:
“这里的问题(正如你的建议)是编译器正在执行Capture Conversion.我相信这是JLS §15.12.2.6 of the JLS的结果.”
package stackoverflow;
import java.util.*;
public class ParameterizedReturn
{
// Parameterized method
public static List getList()
{
return new ArrayList();
}
public static List bindViaReturnStatement()
{
return getList();
}
public static List bindViaVariableAssignment()
{
List intList = getList();
return intList;
}
public static List bindViaMethodInvocation()
{
// Compile error here
return echo(getList());
}
public static List echo(List intList)
{
return intList;
}
}