package sk.stuba.fiit.perconik.utilities; import javax.annotation.Nonnull; import javax.annotation.Nullable; import com.google.common.base.Function; import com.google.common.base.Optional; import static com.google.common.base.Optional.fromNullable; import static com.google.common.base.Optional.of; public final class Optionals { private Optionals() {} private enum FromNonnullFunction implements Function<Object, Optional<?>> { INSTANCE; public Optional<?> apply(@Nonnull final Object reference) { return of(reference); } } private enum FromNullableFunction implements Function<Object, Optional<?>> { INSTANCE; public Optional<?> apply(@Nullable final Object reference) { return fromNullable(reference); } } public static <U extends T, T> Function<U, Optional<T>> fromNonnullFunction() { return Function.class.cast(FromNonnullFunction.INSTANCE); } public static <U extends T, T> Function<U, Optional<T>> fromNullableFunction() { return Function.class.cast(FromNullableFunction.INSTANCE); } }