Я думаю, вы просто спрашиваете, как уменьшить объем кода, который вам нужно написать. Решение такое же, как и для любого такого вопроса: напишите метод, который выполняет повторяющуюся часть, и параметризуйте его с помощью различных частей. Итак, в этом случае вам просто нужно написать общий c служебный метод для генерации столбцов таблицы, взяв заголовок столбца и функцию, которая создает свойство, необходимое фабрике значений ячеек.
Например, вы мог бы сделать что-то вроде
private <S,T> TableColumn<S,T> createColumn(String title, Function<S, Property<T>> prop) {
TableColumn<S,T> column = new TableColumn<>(title);
column.setCellValueFactory(cellData -> prop.apply(cellData.getValue()));
return column ;
}
, а затем, если ваши классы модели используют свойства JavaFX, все, что вам нужно, это
TableColumn<SubClass1, Number> tc1Id = createColumn("Id", SubClass1::idProperty);
et c.
Если вы без использования свойств JavaFX (что является рекомендуемым подходом), вы все равно можете использовать
TableColumn<SubClass2, String> tc2Loc =
createColumn("Location", item -> new SimpleStringProperty(item.getLocation()));
или просто создать метод, который принимает Function<S,T>
вместо Function<S,Property<T>>
.