class Result {

  @NonNull
  public List<T> asList() {
    List<T> list = this.list;
    if (list == null) {
      synchronized (this) {
        list = this.list;
        if (list == null) {
          this.list = list = singletonList(value);
        }
      }
    }
    return list;
  }

    Result(@Nullable final T value, @Nullable final Throwable failure);

}