Java tutorial
/* * 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.giraph.writable.tuple; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.apache.commons.lang3.tuple.Pair; import org.apache.hadoop.io.Writable; /** * Pair Writable class, that knows types upfront and can deserialize itself. * * PairWritable knows types, as instances are passed through constructor, and * are references are immutable (values themselves are mutable). * * Child classes specify no-arg constructor that passes concrete types in. * * Extends Pair, not ImmutablePair, since later class is final. Code is * copied from it. * * @param <L> Type of the left element * @param <R> Type of the right element */ public class PairWritable<L extends Writable, R extends Writable> extends Pair<L, R> implements Writable { /** Left object */ private final L left; /** Right object */ private final R right; /** * Create a new pair instance. * * @param left the left value * @param right the right value */ public PairWritable(L left, R right) { this.left = left; this.right = right; } /** * <p> * Obtains an immutable pair of from two objects inferring * the generic types.</p> * * <p>This factory allows the pair to be created using inference to * obtain the generic types.</p> * * @param <L> the left element type * @param <R> the right element type * @param left the left element, may be null * @param right the right element, may be null * @return a pair formed from the two parameters, not null */ public static <L extends Writable, R extends Writable> PairWritable<L, R> of(L left, R right) { return new PairWritable<L, R>(left, right); } @Override public final L getLeft() { return left; } @Override public final R getRight() { return right; } /** * <p>Throws {@code UnsupportedOperationException}.</p> * * <p>This pair is immutable, so this operation is not supported.</p> * * @param value the value to set * @return never * @throws UnsupportedOperationException as this operation is not supported */ @Override public final R setValue(R value) { throw new UnsupportedOperationException(); } @Override public final void write(DataOutput out) throws IOException { left.write(out); right.write(out); } @Override public final void readFields(DataInput in) throws IOException { left.readFields(in); right.readFields(in); } }