Это означает, что Foo
является «рекурсивной структурой данных». Примерами этого являются деревья, графики, связанные списки и т. Д. Написано не так много значимых программ, которые не используют хотя бы некоторые рекурсивные структуры, например в любой реализации SQL-сервера довольно распространено, что выполняемый план запроса будет определен аналогичным образом. В качестве крошечного примера, предложение WHERE
может быть переведено в FilterNode
, который действует на данные, полученные от некоторого другого Node
(например, сканирование таблицы):
public interface Node { }
public class FilterNode implements Node {
public Node underlyingNode;
public Condition filterCondition;
}
Во многих случаях общая структура образует ориентированный ациклический граф, что означает, что его легко безопасно пересечь рекурсивно. Но если у него есть циклы, вам нужно быть осторожным, чтобы не попасть в бесконечную рекурсию (о чем с юмором предупреждает другой ответ выше).