中的方法我想在这里实现的是由子类来决定是否要将java.lang.String或java.util.HashMap作为参数传递给query()方法。接口只需要声称,子类必须实现查询方法,但我不关心什么类型的参数的子类希望在通过java泛型类型参数接口
我有一个像接口:
interface A<T>{
public void query(T type);
}
两个子像:
public class B implements A<String> {
public void query(String type);
}
public class C implements A<HashMap> {
public void query(HashMap type);
}
然后,我有一个工厂类以产生B或C:
public class AFactory {
public static A<?> getType(String type) {
if(type.equals("B")){
return new B();
} else if(type.equals("C")) {
return new C();
}
}
}
的想法是,客户端可以使用该接口,如下而不会对乙依赖性,C等:
A instance = AFactory.getType("B");
String a = "test";
instance.query(a);
问题我这里是:日食给我误差上instance.query的线(a) :
类型A中的方法查询(capture#2 of?)不适用于参数(String)。
我认为问题在于接口契约不知道查询应该期待String或HashMap。我只能想到解决这个问题的办法是,我要投像的结果:
B instance = (B)AFactory.getType("B");
String a = "test";
instance.query(a);
但是通过这样做,我会对B的,而不是只A(接口)的依赖这是一件好事我想在开始时避免。任何想法如何我可以做到这一点,而不依赖于子类(在这种情况下,B和C)。
编译器查看A实例并说“我需要T,而不是String”,但是你不告诉他T是什么。尽我所知。 – JMelnik 2012-04-17 13:22:59
graet,gotcha,谢谢@JMelnik – Shengjie 2012-04-17 14:15:50