我没有几个类结构,现在在工厂类中创建它们时遇到了问题。
我有通用接口:
interface GenericInterface<T>{
T someMethod(T instance);
}
子类如下:
class Class_A implements GenericInterface<String>{
String someMethod(String instance){//impl};
}
class Class_B implements GenericInterface<Integer>{
Integer someMethod(Integer instance){//impl};
}
现在的问题是我需要像这样的工厂类:
class FactoryClass{
static <T> GenericInterface<T> getSpecificClass(T instance){
//errors
if(instance instanceof String) return new Class_A;
if(instance instanceof Integer) return new Class_B;
}
还有其他地方:
String test = "some text";
GenericInterface<String> helper = FactoryClass.getSpecificClass(test);
String afterProcessing = helper.someMethod(test);
因此,对于String对象作为参数,我应获取
Class_A
实例,对于Integer,应获取Class_B
实例。现在我有一个错误,说
Class_A
不是GenericInterface<T>
的子类型。我可以将Factory类中的返回类型更改为原始类型GenericInterface
,但这似乎不是解决方案,因为那时我在整个项目中都收到了警告。您对如何以不同的设计模式实现这种功能有任何建议吗?由于
someMethod()
的进一步多态调用,我需要通用的超级接口。 最佳答案
从您的用法来看,我相信您需要一个类似
interface GenericInterface<T>{
T someMethod(T input);
}
现在,您应该拥有工厂类
class FactoryClass {
static <T, S extends GenericInterface<T>> S getSpecificClass(T instance) {
if(instance instanceof String) return new Class_A();
if(instance instanceof Integer) return new Class_B();
return null;
}
}
希望这可以帮助。
祝好运。
关于java - 具有多态性和工厂类的泛型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28212585/