@NotNull
  public <T> DataNode<T> createChild(@NotNull Key<T> key, @NotNull T data) {
    DataNode<T> result = new DataNode<>(key, data, this);
    doAddChild(result);
    return result;
  }
@NotNull
  public <T> DataNode<T> createChild(@NotNull Key<T> key, @NotNull T data)