[ https://issues.apache.org/jira/browse/FLINK-3002?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15011787#comment-15011787 ]
ASF GitHub Bot commented on FLINK-3002: --------------------------------------- Github user StephanEwen commented on a diff in the pull request: https://github.com/apache/flink/pull/1371#discussion_r45249202 --- Diff: flink-java/src/main/java/org/apache/flink/api/java/typeutils/Either.java --- @@ -0,0 +1,147 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.flink.api.java.typeutils; + +/** + * This type represents a value of one two possible types, Left or Right + * (a disjoint union), inspired by Scala's Either type. + * + * @param <L> the type of Left + * @param <R> the type of Right + */ +public abstract class Either<L, R> { + + /** + * Create a Left value of Either + */ + public static <L, R> Either<L, R> left(L value) { + return new Left<L, R>(value); + } + + /** + * Create a Right value of Either + */ + public static <L, R> Either<L, R> right(R value) { + return new Right<L, R>(value); + } + + /** + * Retrieve the Left value of Either. + * @return the Left value + * @throws IllegalStateException if called on a Right + */ + public abstract L left() throws IllegalStateException; + + /** + * Retrieve the Right value of Either. + * @return the Right value + * @throws IllegalStateException if called on a Left + */ + public abstract R right() throws IllegalStateException; + + /** + * + * @return true if this is a Left value, false if this is a Right value + */ + public final boolean isLeft() { + return getClass() == Left.class; + } + + /** + * + * @return true if this is a Right value, false if this is a Left value + */ + public final boolean isRight() { + return getClass() == Right.class; + } + + private static class Left<L, R> extends Either<L, R> { + final L value; --- End diff -- Field can be private. > Add an EitherType to the Java API > --------------------------------- > > Key: FLINK-3002 > URL: https://issues.apache.org/jira/browse/FLINK-3002 > Project: Flink > Issue Type: New Feature > Components: Java API > Affects Versions: 0.10.0 > Reporter: Stephan Ewen > Assignee: Vasia Kalavri > Fix For: 1.0.0 > > > Either types are recurring patterns and should be serialized efficiently, so > it makes sense to add them to the core Java API. > Since Java does not have such a type as of Java 8, we would need to add our > own version. > The Scala API handles the Scala Either Type already efficiently. I would not > use the Scala Either Type in the Java API, since we are trying to get the > {{flink-java}} project "Scala free" for people that don't use Scala and o not > want to worry about Scala version matches and mismatches. -- This message was sent by Atlassian JIRA (v6.3.4#6332)