Pair extends Tuple implements AValue<A>, BValue<B> { public static <A extends Message, B extends Message> Pair<A, Optional<B>> withNullable(A a, @Nullable B b) { checkNotNullOrEmpty(a); checkNotEmpty(b); Pair<A, Optional<B>> result = new Pair<>(a, ofNullable(b)); return result; } private  Pair(A a, B b); static Pair<A, B> of(A a, B b); static Pair<A, Optional<B>> withNullable(A a, @Nullable B b); static Pair<A, Optional<B>> withOptional(
            A a,
            @SuppressWarnings("OptionalUsedAsFieldOrParameterType") /* see @apiNote */ Optional<B> b
    ); static Pair<A, B> withEither(A a, B b); @Override A getA(); @Override B getB();  }
@Test @DisplayName("return Empty for empty Optional in iterator") void getAbsentInIterator() { StringValue a = TestValues.newUuidValue(); Pair<StringValue, Optional<BoolValue>> pair = Pair.withNullable(a, null); Iterator<Message> iterator = pair.iterator(); assertEquals(a, iterator.next()); assertEquals(Empty.getDefaultInstance(), iterator.next()); assertFalse(iterator.hasNext()); }