Java组件类Triple、MutableTriple、ImmutableTriple

一、Triple抽象类

package org.apache.commons.lang3.tuple;
import java.io.Serializable;
import java.util.Objects;

import org.apache.commons.lang3.builder.CompareToBuilder;

public abstract class Triple<L, M, R> implements Comparable<Triple<L, M, R>>, Serializable {

    /** Serialization version */
    private static final long serialVersionUID = 1L;

    /**
     * 静态方法,返回不可变的存储三个元素的组件对象
     */
    public static <L, M, R> Triple<L, M, R> of(final L left, final M middle, final R right) {
        return new ImmutableTriple<>(left, middle, right);
    }

    /**
     * 获取 左元素
     */
    public abstract L getLeft();

    /**
     * 获取中元素
     */
    public abstract M getMiddle();

    /**
     * 获取右元素
     */
    public abstract R getRight();

    /**
     * 比较组件中三个元素的值大小
     */
    @Override
    public int compareTo(final Triple<L, M, R> other) {
      return new CompareToBuilder().append(getLeft(), other.getLeft())
          .append(getMiddle(), other.getMiddle())
          .append(getRight(), other.getRight()).toComparison();
    }

    /**
     * 比较三个组件中三个对象值是否相等
     */
    @Override
    public boolean equals(final Object obj) {
        if (obj == this) {
            return true;
        }
        if (obj instanceof Triple<?, ?, ?>) {
            final Triple<?, ?, ?> other = (Triple<?, ?, ?>) obj;
            return Objects.equals(getLeft(), other.getLeft())
                && Objects.equals(getMiddle(), other.getMiddle())
                && Objects.equals(getRight(), other.getRight());
        }
        return false;
    }

    /**
     * 返回组件对象的哈希吗
     */
    @Override
    public int hashCode() {
        return (getLeft() == null ? 0 : getLeft().hashCode()) ^
            (getMiddle() == null ? 0 : getMiddle().hashCode()) ^
            (getRight() == null ? 0 : getRight().hashCode());
    }

    /**
     * 打印组件的三个对象
     */
    @Override
    public String toString() {
        return "(" + getLeft() + "," + getMiddle() + "," + getRight() + ")";
    }

    /**
     * 格式化三个组件的对象
     */
    public String toString(final String format) {
        return String.format(format, getLeft(), getMiddle(), getRight());
    }

}

二、ImmutableTriple不可变组件对象

package org.apache.commons.lang3.tuple;

public final class ImmutableTriple<L, M, R> extends Triple<L, M, R> {

    /**
    * 返回一个三个对象都是null的不可变组件
    */
    @SuppressWarnings("rawtypes")
    private static final ImmutableTriple NULL = ImmutableTriple.of(null, null, null);

    /** Serialization version */
    private static final long serialVersionUID = 1L;

    /**
    * 静态方法,返回三个元素都为null的不可变的组件对象
    */  
    @SuppressWarnings("unchecked")
    public static <L, M, R> ImmutableTriple<L, M, R> nullTriple() {
        return NULL;
    }

    /** Left object */
    public final L left;
    /** Middle object */
    public final M middle;
    /** Right object */
    public final R right;

    /**
     * 静态方法,返回一个三个指定对象的组件对象
     */
    public static <L, M, R> ImmutableTriple<L, M, R> of(final L left, final M middle, final R right) {
        return new ImmutableTriple<>(left, middle, right);
    }

    /**
     * 传递三个对象的构造函数
     */
    public ImmutableTriple(final L left, final M middle, final R right) {
        super();
        this.left = left;
        this.middle = middle;
        this.right = right;
    }

    /**
     * 返回做元素
     */
    @Override
    public L getLeft() {
        return left;
    }

    /**
     * 返回中间元素
     */
    @Override
    public M getMiddle() {
        return middle;
    }

    /**
     * 返回右元素
     */
    @Override
    public R getRight() {
        return right;
    }
}

三、MutableTriple可变组件对象

package org.apache.commons.lang3.tuple;
public class MutableTriple<L, M, R> extends Triple<L, M, R> {

    /** Serialization version */
    private static final long serialVersionUID = 1L;

    /** Left object */
    public L left;
    /** Middle object */
    public M middle;
    /** Right object */
    public R right;

    /**
     * 静态方法,返回三个元素对象的组件对象
     */
    public static <L, M, R> MutableTriple<L, M, R> of(final L left, final M middle, final R right) {
        return new MutableTriple<>(left, middle, right);
    }

    /**
     * 无参数构造函数
     */
    public MutableTriple() {
        super();
    }

    /**
     * 三个参数的构造函数
     */
    public MutableTriple(final L left, final M middle, final R right) {
        super();
        this.left = left;
        this.middle = middle;
        this.right = right;
    }

    /**
     * 返回左元素
     */
    @Override
    public L getLeft() {
        return left;
    }

    /**
     * 返回右元素
     */
    public void setLeft(final L left) {
        this.left = left;
    }

    /**
     * 返回中间元素
     */
    @Override
    public M getMiddle() {
        return middle;
    }

    /**
     * 修改中间对象值
     */
    public void setMiddle(final M middle) {
        this.middle = middle;
    }

    /**
     * 返回右元素 值
     */
    @Override
    public R getRight() {
        return right;
    }

    /**
     * 修改右元素对象值
     */
    public void setRight(final R right) {
        this.right = right;
    }
}

原文链接:https://blog.csdn.net/yaomingyang/article/details/79306103

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值