@SuppressWarnings("unchecked") private static <T> Mergeable<T> mergeInfo(Mergeable<T> base, T other) { return (Mergeable<T>) base.mergeWith(other); }
static <T extends Mergeable<T>> Optional<T> merge(Optional<T> first, Optional<T> second) { if (first.isPresent() && second.isPresent()) { return Optional.of(first.get().mergeWith(second.get())); } else if (first.isPresent()) { return first; } return second; } }