我制作了几个类结构,现在我在工厂类中创建它们有问题。 我有通用接口:
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()
的进一步多态调用,我需要通用的超级接口。
答案 0 :(得分:1)
根据您的使用情况,我认为您需要一个像
这样的界面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;
}
}
希望这有帮助。
祝你好运。