fábrica estática genérica parametrizada java

¿Es posible en Java crear un método / clase de fábrica estático que use una interfaz como tipo parametrizado y devolver una clase de implementación de esta interfaz dada?

Aunque mi conocimiento de Genéricos es limitado, esto es lo que quiero hacer:

// define a base interface:
public interface Tool {
    // nothing here, just the interface.
}

// define a parser tool:
public interface Parser extends Tool {
    public ParseObject parse(InputStream is); 
}

// define a converter tool:
public interface Converter extends Tool {
    public ConvertObject convert(InputStream is, OutputStream os);
}

// define a factory class
public class ToolFactory {
    public static <? extends Tool> getInstance(<? extends Tool> tool) {
       // what I want this method to return is:
       // - ParserImpl class, or
       // - ConverterImpl class
       // according to the specified interface.
       if (tool instanceof Parser) {
          return new ParserImpl();
       }
       if (tool instanceof Converter) {
          return new ConverterImpl();
       }
    }
}

Quiero restringir el código del cliente para insertar solo un 'tipo' de interfaz en el método getInstance () que se extiende desde la interfaz de la herramienta que especifiqué. De esta manera, estoy seguro de que el tipo de herramienta que se inserta es una herramienta legítima.

El código del cliente debería verse así:

public class App {
   public void main(String[] args) {

      Parser parser = null;
      Converter converter = null;

      // ask for a parser implementation (without knowing the implementing class)
      parser = ToolFactory.getInstance(parser);

      // ask for a converter implementation
      converter = ToolFactory.getInstance(converter);

      parser.parse(...);
      converter.convert(... , ...);
   }
}

La fábrica debe activar el tipo de interfaz (descuidada si es nula o no), definida antes de que se solicite de fábrica. Sé que esto no va a funcionar como lo escribí, pero espero que uno de los lectores sepa lo que quiero lograr.

El tipo de retorno del método getInstance es el mismo que el parámetro entrante, por lo que cuando se pasa una interfaz Parser, también devuelve un Parser p = new ParserImpl (); volver p;

Gracias de antemano por ayudarme.

Respuestas a la pregunta(1)

Su respuesta a la pregunta