Class Slot<T>

java.lang.Object
jdk.jpackage.internal.util.Slot<T>
Type Parameters:
T - value type

public final class Slot<T> extends Object
A mutable container object for a value.

An alternative for cases where AtomicReference would be an overkill. Sample usage:

void foo(MessageNotifier messageNotifier) {
    var lastMessage = Slot.createEmpty();

    messageNotifier.setListener(msg -> {
        lastMessage.set(msg);
    }).run();

    lastMessage.find().ifPresentOrElse(msg -> {
        System.out.println(String.format("The last message: [%s]", msg));
    }, () -> {
        System.out.println("No messages received");
    });
}

abstract class MessageNotifier {
    MessageNotifier setListener(Consumer<String> messageConsumer) {
        callback = messageConsumer;
        return this;
    }

    void run() {
        for (;;) {
            var msg = fetchNextMessage();
            msg.ifPresent(callback);
            if (msg.isEmpty()) {
                break;
            }
        }
    }

    abstract Optional<String> fetchNextMessage();

    private Consumer<String> callback;
}
An alternative to the Slot would be either AtomicReference or a single-element String[] or any other suitable container type. AtomicReference would be an overkill if thread-safety is not a concern and the use of other options would be confusing.
  • Constructor Details

    • Slot

      public Slot()
  • Method Details

    • createEmpty

      public static <T> Slot<T> createEmpty()
    • get

      public T get()
    • find

      public Optional<T> find()
    • set

      public void set(T v)