java.util.Pair

Weijun Wang Weijun.Wang at Sun.COM
Wed Mar 31 07:32:12 UTC 2010


"implements Serializable"?

-Max

On Mar 31, 2010, at 7:34 AM, joe.darcy at Oracle.com wrote:

> 
> 
> On 3/30/2010 10:54 AM, Kevin Bourrillion wrote:
>> Pair is only a partial, flawed solution to a special case (n=2) of a very significant problem: the disproportionate complexity of creating value types in Java.  I support addressing the underlying problem in Java 8, and not littering the API with dead-end solutions like Pair.
> 
> While I have sympathy with that conclusion, there is the
> side-effect of littering many APIs with the flotsam of lots of different
> classes named "Pair."  My inclination would be to produce one adequate
> Pair class in the JDK to prevent the proliferation of yet more Pair classes in other code bases.
> 
> I should know better than to take the bait, below is a first cut at
> java.util.Pair.
> 
> -Joe
> 
> package java.util;
> 
> import java.util.Objects;
> 
> /**
> * An immutable pair of values.  The values may be null.  The values
> * themselves may be mutable.
> *
> * @param <A> the type of the first element of the pair
> * @param <B> the type of the second element of the pair
> *
> * @since 1.7
> */
> public final class Pair<A, B> {
>    private final A a;
>    private final B b;
> 
>    private Pair(A a, B b) {
> 	this.a = a;
> 	this.b = b;
>    }
> 
>    /**
>     * Returns a pair whose elements are the first and second
>     * arguments, respectively.
>     * @return a pair constructed from the arguments
>     */
>    public static <C, D> Pair<C, D> valueOf(C c, D d) {
> 	// Don't mandate new values.
> 	return new Pair<C, D>(c, d);
>    }
> 
>    /**
>     * Returns the value of the first element of the pair.
>     * @return the value of the first element of the pair
>     */
>    public A getA() {
> 	return a;
>    }
> 
>    /**
>     * Returns the value of the second element of the pair.
>     * @return the value of the second element of the pair
>     */
>    public B getB() {
> 	return b;
>    }
> 
>    /**
>     * TBD
>     */
>    @Override
>    public String toString() {
> 	return "[" + Objects.toString(a) + ", " + Objects.toString(b) + "]";
>    }
> 
>    /**
>     * TBD
>     */
>    @Override
>    public boolean equals(Object x) {
> 	if (!(x instanceof Pair))
> 	    return false;
> 	else {
> 	    Pair<?,?> that = (Pair<?,?>) x;
> 	    return
> 		Objects.equals(this.a, that.a) &&
> 		Objects.equals(this.b, that.b);
> 	}
>    }
> 
>    /**
>     * TBD
>     */
>    @Override
>    public int hashCode() {
> 	return Objects.hash(a, b);
>    }
> }




More information about the core-libs-dev mailing list