Чтение всех ответов, которые я бы настоятельно рекомендовал, вместо ответов, основанных на рефлексии, поскольку после этого вам придется быть очень осторожным при переименовании классов.
Также вместо:
if ("ListLayout".equals(userInput)) {
return new ListLayout();
}
вы можете добавить защищенное поле внутри вашей базы Layout
класс:
public abstract class Layout {
protected String userInputName;
}
и изменив его расширители следующим образом:
public class ListLayout {
public ListLayout() {
userInputName = "listLayout"; // set protected field
}
}
Тогда вы можете сделать:
for (Layout l : setOfAllLayouts) {
if (userInput.equals(l.getInputName)) {
return l.clone();
}
}