ジェネリック Base クラスを返すファクトリ メソッドをジェネリック化しようとしています。動作しますが、「BaseClass is a raw type...」という警告が表示されます。
ジェネリック メソッドに関する 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 でフォーマットされるわけではありません。整数 (または文字列、またはリスト) をフォーマットする方法は 2 つまたは 3 つあります。それがパラメータ unrelatedInteger の目的です。
フィードバックをお寄せいただきありがとうございます。