Я использую этот код ниже, но позвольте мне сначала объяснить, чего я хочу достичь.У меня есть 3 класса, Publisher
, Consumer
и Broker
.Я хочу создать статический метод, который принимает аргументы от CLI и возвращает список каждого класса в зависимости от того, что я указываю.Пример ниже является полностью функциональным, но работает только для класса Publisher
.У меня вопрос, как я могу изменить приведенный ниже код, чтобы принимать несколько классов и возвращать List< T >
вместо List< Publisher >
.Я пытался использовать дженерики, но таким образом я не могу вызвать конструктор для создания нового объекта.Не беспокойтесь о разбиениях String, это не имеет никакого отношения к проблеме, основное внимание уделяется циклу while, где я создаю экземпляр Object.Моя цель - использовать этот класс таким образом
ArgParser.< Publisher >fetchEntitiesFromCommandLine(args)
ArgParser.< Broker > fetchEntitiesFromCommandLine(args)
ArgParser.< Consumer > fetchEntitiesFromCommandLine(args)
Заранее спасибо!
public class ArgParser {
public static List<Publisher> fetchPublishersFromCommandLine(String[] args) throws IllegalArgumentException {
List<Publisher> publishers = new ArrayList<>();
int position = -1;
for (int i = 0; i < args.length; i++) {
if (args[i].equals("-p")) {
position = i;
}
}
if (position == -1)
throw new IllegalArgumentException();
try {
while (args[++position] != null) {
String[] data = args[position].split(":");
Publisher publisher = new Publisher(data[0], Integer.parseInt(data[1]));
publishers.add(publisher);
}
// This line never executes, however compiler warned me.
throw new IndexOutOfBoundsException();
} catch (IndexOutOfBoundsException err) {
return publishers;
}
}
}