我想通用化返回 泛型基類的工廠方法。它的工作原理,但我得到 「BaseClass是一種原始類型...」的警告。Java - 返回通用基類型的工廠方法
我已經通過通用方法, Java文檔閱讀,但我還沒有完全得到如何做到這一點。
下面是一些代碼:
級#1
//base abstract class
public abstract class BaseFormatter<T>
{
public abstract String formatValue(T value);
}
類#2
//two implementations of concrete classes
public class FooFormatter extends BaseFormatter<Integer>
{
@Override
public String formatValue(Integer value)
{
//return a formatted String
}
}
類#3
public class BarFormatter extends BaseFormatter<String>
{
@Override
public String formatValue(String value)
{
//return a formatted String
}
}
工廠方法在一個單獨的類
public static BaseFormatter getFormatter(Integer unrelatedInteger)
{
if (FOO_FORMATTER.equals(unrelatedInteger))
return new FooFormatter();
else if (BAR_FORMATTER.equals(unrelatedInteger))
return new BarFormatter();
//else...
}
電話工廠方法從其他地方中的代碼
BaseFormatter<Integer> formatter = getFormatter(someInteger);
formatter.formatValue(myIntegerToFormat);
的問題是getFormatter()方法警告BaseFormatter是 原始類型,它是。我已經嘗試過各種各樣的東西,比如BaseFormatter 等。當然,我希望返回類型是通用的,如調用方法中聲明的 BaseFormatter。
請注意,格式化程序類型不是基於類的類型。例如並非所有Integer 值都使用FooFormatter格式化。有兩種或三種不同的方法可以對整數(或字符串或列表)進行格式化。這就是param unrelatedInteger的用途。
在此先感謝您的任何反饋意見。
簡單的答案:Java類型系統無法安全地表達您想要的約束。這意味着你不能擺脫這個演員的警告。 – millimoose