32 lines
981 B
Java
32 lines
981 B
Java
![]() |
// Copyright 2023 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;
|
||
|
|
||
|
import androidx.annotation.NonNull;
|
||
|
|
||
|
/**
|
||
|
* A simple single-argument callback to handle the result of a computation that must be called
|
||
|
* exactly once.
|
||
|
*
|
||
|
* @param <T> The type of the computation's result.
|
||
|
*/
|
||
|
public class RequiredCallback<T> implements Callback<T> {
|
||
|
// Enforces (under test) that this callback is invoked before it is GC'd.
|
||
|
private final LifetimeAssert mLifetimeAssert = LifetimeAssert.create(this);
|
||
|
private Callback<T> mCallback;
|
||
|
|
||
|
public RequiredCallback(@NonNull Callback<T> callback) {
|
||
|
mCallback = callback;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void onResult(T result) {
|
||
|
assert mCallback != null : "Callback was already called.";
|
||
|
mCallback.onResult(result);
|
||
|
LifetimeAssert.setSafeToGc(mLifetimeAssert, true);
|
||
|
mCallback = null;
|
||
|
}
|
||
|
}
|