У меня есть общее дерево, общий параметр - это тип данных, хранящийся в узлах:
class TreeNode<D>{
public D data;
.....
}
Затем интерфейс посетителя для использования вместе с пересечением дерева:
interface Visitor<D> {
void visit(TreeNode<D> node);
}
Некоторые посетители могут воспользоваться дженериками:
class DataListCreator<D> implements Visitor<D> {
List<D> dataList = new ArrayList<D>();
public void visit(TreeNode<D> node) {
dataList.add(node.data);
}
public List<D> getDataList() {
return dataList;
}
Но другие этого не делают, они бы лучше подошли к сырому классу
class NodeCounter implements Visitor {
private int nodeCount = 0;
public void visit(TreeNode node) {
nodeCount++;
}
public int count() {
return nodeCount;
}
Но я не знаю, как реализовать этот последний случай, приведенный выше код не компилируется, поскольку мне нужно реализовать общий интерфейс, а не необработанный. Я пробовал реализовать
Visitor<?>
с тем же результатом. Итак, мой вопрос: я вынужден использовать общий тип
NodeCounter<D>
реализовать интерфейс посетителя ?.
Спасибо.