У меня есть TreeTableView
подкласс. Я хочу использовать SelectionModel
для этого, в котором определенные методы генерируют исключения, если предпринята попытка их использования (см. этот вопрос по причине).
Скорее, к сожалению, класс TreeTableView.TreeTableViewSelectionModel
- это abstract
. Мой «старт» при попытке доставить такой конкретный класс заключается в следующем:
class MyTreeTableSelectionModel extends TreeTableView.TreeTableViewSelectionModel {
final static String PROHIBITED_METHOD_MSG = 'Method is prohibited due to problems with internal JavaFX NPEs. Use select( row, column ) instead.'
TreeTableView.TreeTableViewSelectionModel suppliedConcreteModel
MyTreeTableSelectionModel(TreeTableView treeTableView) {
super( treeTableView )
assert treeTableView.selectionModel != null
suppliedConcreteModel = treeTableView.selectionModel
}
@Override
ObservableList<TreeTablePosition> getSelectedCells() {
suppliedConcreteModel.getSelectedCells()
}
@Override
boolean isSelected(int row, TableColumnBase column) {
suppliedConcreteModel.isSelected( row, column )
}
@Override
void select(int row, TableColumnBase column) {
suppliedConcreteModel.select( row, column )
}
@Override
void clearAndSelect(int row, TableColumnBase column) {
suppliedConcreteModel.clearAndSelect( row, column )
}
@Override
void clearSelection(int row, TableColumnBase column) {
suppliedConcreteModel.clearSelection( row, column )
}
@Override
void selectLeftCell() {
suppliedConcreteModel.selectLeftCell()
}
@Override
void selectRightCell() {
suppliedConcreteModel.selectRightCell()
}
@Override
void selectAboveCell() {
suppliedConcreteModel.selectAboveCell()
}
@Override
void selectBelowCell() {
suppliedConcreteModel.selectBelowCell()
}
@Override
void select( int row ){
throw new Exception( PROHIBITED_METHOD_MSG )
}
@Override
void selectFirst(){
throw new Exception( PROHIBITED_METHOD_MSG )
}
@Override
void selectLast(){
throw new Exception( PROHIBITED_METHOD_MSG )
}
}
... это (очевидно) не работает так, как реализовано: реализованные переопределенные abstract
методы пересылают вызовы инкапсулированному объект suppliedConcreteModel
, но другие методы (которых может быть около 50) и все свойства и поля перенаправляются на конкретный объект класса MyTreeTableSelectionModel
.
Есть ли Groovy способ пересылки всех методов, полей и свойств для инкапсулированного объекта? Я посмотрел на этот вопрос , но я не до конца его понимаю или действительно ли он актуален, и я подозреваю, что существует более "ортодоксальный" Groovy способ делать то, что я хочу.