gpt4 book ai didi

Java - 返回通用基本类型的工厂方法

转载 作者:行者123 更新时间:2023-12-01 05:16:17 25 4
gpt4 key购买 nike

我正在尝试泛化一个返回的工厂方法通用基类。它有效,但我得到了“BaseClass 是原始类型...”警告。

我已经阅读了有关泛型方法的 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。

请注意,格式化程序类型不基于类类型。例如并非全部为整数值使用 FooFormatter 进行格式化。有两三个不同的整数(或字符串或列表)的格式化方式。这就是param unrelatedInteger 用于。

预先感谢您的任何反馈。

最佳答案

如果 getFormatter 在 BaseFormatter 中定义,则使用:

public static BaseFormatter<T> getFormatter(Integer unrelatedInteger)

如果 getFormatter 是在 BaseFormatter 之外的另一个类中定义的,则使用:

public static BaseFormatter<?> getFormatter(Integer unrelatedInteger)

关于Java - 返回通用基本类型的工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11171955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com