чего я хочу добиться здесь, так это того, что подкласс должен решить, хотят ли они передать java.lang.String или java.util.HashMap в качестве параметра для запроса ()метод. Интерфейс просто должен заявить, что подклассы должны реализовать метод запроса, но меня не волнует, какой тип параметров подклассы хотят передать.
У меня есть такой интерфейс, как:
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();
}
}
}
Идея состоит в том, что клиент может использовать интерфейс, как показано ниже, без зависимостей от B, C, таких как:
A instance = AFactory.getType("B");
String a = "test";
instance.query(a);
У меня есть проблема :eclipse дает мне ошибку в строке of instance.query (a):
Метод query (захват #2 -of ? )в типе A неприменим для аргументов (String).
Я думаю, проблема в том, что контракт интерфейса не знает, что запрос должен ожидать String или HashMap. Я могу думать только о том, как решить эту проблему, что мне нужно привести результат к типу :
B instance = (B)AFactory.getType("B");
String a = "test";
instance.query(a);
. Но, сделав это,У меня была бы зависимость от B вместо просто A (интерфейса ), чего я хотел избежать в начале. Любая идея, как я могу это сделать, не имея зависимостей от подклассов (в данном случае B и C ).