/driver-core/src/main/com/mongodb/internal/inject/SameObjectProvider.java
https://github.com/jyemin/mongo-java-driver · Java · 59 lines · 34 code · 10 blank · 15 comment · 2 complexity · 055df99b31b5da2181fa952707dd0338 MD5 · raw file
- /*
- * Copyright 2008-present MongoDB, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package com.mongodb.internal.inject;
- import com.mongodb.annotations.ThreadSafe;
- import com.mongodb.lang.Nullable;
- import java.util.Optional;
- import java.util.concurrent.atomic.AtomicReference;
- import static com.mongodb.assertions.Assertions.assertNotNull;
- import static com.mongodb.assertions.Assertions.assertTrue;
- @ThreadSafe
- public final class SameObjectProvider<T> implements Provider<T> {
- private final AtomicReference<T> object;
- private SameObjectProvider(final @Nullable T o) {
- object = new AtomicReference<>();
- if (o != null) {
- initialize(o);
- }
- }
- @Override
- public T get() {
- return assertNotNull(object.get());
- }
- @Override
- public Optional<T> optional() {
- return Optional.of(get());
- }
- public void initialize(final T o) {
- assertTrue(object.compareAndSet(null, o));
- }
- public static <T> SameObjectProvider<T> initialized(final T o) {
- return new SameObjectProvider<>(o);
- }
- public static <T> SameObjectProvider<T> uninitialized() {
- return new SameObjectProvider<>(null);
- }
- }