blob: 0b9062072f984ec78437ac76f94e6c3759df8c55 [file] [log] [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.base.supplier;
import androidx.annotation.Nullable;
/**
* Based on Java 8's java.util.function.Supplier.
* Similar to Callable<T>, but without a checked Exception and with #hasValue().
*
* @param <T> Return type.
*/
public interface Supplier<T> {
/** Returns the value currently held or <code>null</code> when none is held. */
@Nullable
T get();
/**
* Returns whether the supplier holds a value currently.
*
* This default implementation should only be used with trivial implementation of #get(), where
* the supplier object is accessed. In case it is created on demand, or the Supplier
* implementation provides a new one every time, this method must be overridden.
*/
default boolean hasValue() {
T t = get();
assert t == get() : "Value provided by #get() must not change.";
return t != null;
}
}