параметр типа java generics для метода в интерфейсе

чего я хочу добиться здесь, так это того, что подкласс должен решить, хотят ли они передать 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 ).

5
задан TechSpellBound 17 April 2012 в 18:08
поделиться