我正在尝试通用化返回通用基类的工厂方法。它有效,但我收到“BaseClass 是原始类型......”警告。
我已经阅读了有关通用方法的 Java 文档,但我仍然不太了解如何完成此操作。
这是一些代码:
第一类
//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 一样。
请注意,格式化程序类型不基于类类型。例如,并非所有整数值都使用 FooFormatter 进行格式化。可以通过两种或三种不同的方式格式化整数(或字符串或列表)。这就是参数 unrelatedInteger 的用途。
提前感谢您的任何反馈。