我最近在重構代碼時遇到了這個問題:參數化方法如何在某些情況下隱式約束而不是其他情況?
下面的方法「getList()」有一個參數化的返回類型。在此之下,我已經提出了三種嘗試隱含地將<T>
綁定到<Integer>
的方法。
我不明白爲什麼前兩個編譯和運行正確,而第三個(bindViaMethodInvocation)甚至不會編譯。
任何線索?
在尋找StackOverflow的類似問題時,我遇到了這個問題: Inferred wildcard generics in return type。答案在那裏(信用Laurence Gonsalves)有幾個有用的參考鏈接來解釋應該怎麼做: 「這裏的問題(如你所建議的)是編譯器執行Capture Conversion。我相信這是一個結果JLS的§15.12.2.6 of the JLS。「或者賦值List<Integer>
或從返回List<Integer>
方法返回語句 -
package stackoverflow;
import java.util.*;
public class ParameterizedReturn
{
// Parameterized method
public static <T extends Object> List<T> getList()
{
return new ArrayList<T>();
}
public static List<Integer> bindViaReturnStatement()
{
return getList();
}
public static List<Integer> bindViaVariableAssignment()
{
List<Integer> intList = getList();
return intList;
}
public static List<Integer> bindViaMethodInvocation()
{
// Compile error here
return echo(getList());
}
public static List<Integer> echo(List<Integer> intList)
{
return intList;
}
}
謝謝馬特!我想我沒有正確地對這些做減價。 – 2011-04-05 14:40:00