Я создаю класс Java Swing под названием ListView, который пытается быть списком общего назначения.
public class ListView<T> extends JPanel {
private IListViewDataSource<T> dataSource;
private JPanel list;
public ListView(IListViewDataSource<T> dataSource, Dimension dimension) {
this.dataSource = dataSource;
list = new JPanel(new GridLayout(0, 1));
this.add(new JScrollPane(list));
this.setPreferredSize(dimension);
}
public void loadRows() {
for (int i = 0; i < dataSource.getNumberOfElements(); i++) {
JLabel label = new JLabel(dataSource.getTitleOfElement(dataSource.getElementAtPosition(i)));
list.add(label);
}
}
}
Для этого я объявил интерфейс под названием IListViewDataSource, который определяет методы, необходимые для представления списка для получения его данных.
public interface IListViewDataSource<T> {
T getElementAtPosition(int position);
int getNumberOfElements();
String getTitleOfElement(T element);
}
Я хотел, чтобы была возможность создать новый ListView с тем источником данных, который вы объявляете, для того, чтобы вводить данные в список. Пока все хорошо.
Теперь я создаю другой класс с именем OfferListView, который расширяет ListView, и чтобы не иметь ненужного дополнительного файла, я хотел, чтобы он реализовал свой собственный ListViewDataSource. Проблема в том, что я не могу вызвать super(this, dimension)
внутри конструктора для этого нового класса, так как мне тогда сказали, что this
нельзя использовать до вызова конструктора суперкласса.
Этот «шаблон» - то, что используется при программировании с UIKit для iOS, и я думаю, что это довольно хорошо, но я не могу заставить его работать на Java. Как я мог подойти к этому?