Возможно ли в Java создать статический метод/класс factory, который использует интерфейс в качестве параметризованного типа и возвращает класс реализации данного интерфейса?
Хотя мои знания о Дженериках ограничены, вот что я хочу сделать:
// 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();
}
}
}
Я хочу ограничить клиентский код только введением типа интерфейса в метод getInstance(), который простирается от указанного интерфейса инструмента. Таким образом, я точно знаю, что введенный тип инструмента является законным инструментом.
Клиентский код должен выглядеть следующим образом:
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(... , ...);
}
}
factory должен включить тип интерфейса (небрежный, если он нуль или нет), определенный перед его запросом из factory. Я знаю, что это не будет работать так, как я писал это, но я надеюсь, что один из читателей знает, чего я хочу достичь.
Возвращаемый тип метода getInstance совпадает с входящим параметром, поэтому, когда интерфейс Parser передан, он также возвращает Parser p = new ParserImpl(); return p;
Заранее благодарим за помощь.