Как фабрика может создавать экземпляры подклассов универсального класса?

#java #generics #factory

Вопрос:

У меня есть универсальный класс GenericClass :

 public class GenericClasslt;T extends MySuperClassgt; {  //...  public void doSomething(T t) {  //...  } }  

Это имеет несколько подклассов, которые выглядят следующим образом:

 public class SubClassOfGeneric extends GenericClasslt;AnotherClassgt; {  //...  @Override  public void doSomething(AnotherClass a) {  //...  } }  

И AnotherClass расширяется MySuperClass .

Теперь мне нужна фабрика, которая создает экземпляры подклассов GenericClass . Это код, который у меня есть прямо сейчас:

 public class Factory {  public GenericClass create(String type) { //SonarLint warning  if(type == "SubClassOfGeneric") {  return new SubClassOfGeneric();  //...  } }  

В этом коде я получаю предупреждение SonarLint: GenericClass is a raw type. References to generic type GenericClasslt;Tgt; should be parameterized.

Кроме того, у меня есть другая фабрика, которая создает экземпляры подклассов MySuperClass . Я также получаю другую ошибку при фактическом создании объекта с помощью фабрики:

 MySuperClass arg = new SuperClassFactory().create("AnotherClass"); Factory f = new Factory(); GenericClass g = f.create("SubClassOfGeneric"); g.doSomething(arg); // SonarLint error  

Что показывает ошибку: Type Safety: The method doSomething(MySuperClass) belongs to the raw type GenericClass. References to generic type GenericClasslt;Tgt; should be parameterized.

Как я могу параметризовать общий класс, если я знаю конкретный тип только во время выполнения?