Immutable Couple Class pls
This commit is contained in:
parent
a663566a89
commit
6de0729328
99
src/com/massivecraft/mcore/Couple.java
Normal file
99
src/com/massivecraft/mcore/Couple.java
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
package com.massivecraft.mcore;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore.util.MUtil;
|
||||||
|
|
||||||
|
public class Couple<A, B> implements Entry<A, B>, Cloneable, Serializable
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CONSTANTS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static final transient long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FIELDS: RAW
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private final A first;
|
||||||
|
public A getFirst() { return this.first; };
|
||||||
|
|
||||||
|
private final B second;
|
||||||
|
public B getSecond() { return this.second; };
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FIELDS: WITH
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public Couple<A, B> withFirst(A first) { return valueOf(first, second); }
|
||||||
|
|
||||||
|
public Couple<A, B> withSecond(B second) { return valueOf(first, second); }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// PRIVATE CONSTRUCTOR
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private Couple(A first, B second)
|
||||||
|
{
|
||||||
|
this.first = first;
|
||||||
|
this.second = second;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE: ENTRY
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public A getKey()
|
||||||
|
{
|
||||||
|
return this.first;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public B getValue()
|
||||||
|
{
|
||||||
|
return this.second;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public B setValue(B arg0)
|
||||||
|
{
|
||||||
|
throw new IllegalStateException("This entry is a couple which is immutable.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FACTORY: VALUE OF
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static <A, B> Couple<A, B> valueOf(A first, B second)
|
||||||
|
{
|
||||||
|
return new Couple<A, B>(first, second);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// EQUALS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object derpObject)
|
||||||
|
{
|
||||||
|
if (derpObject == null) return false;
|
||||||
|
if (!(derpObject instanceof Couple<?, ?>)) return false;
|
||||||
|
Couple<?, ?> derp = (Couple<?, ?>)derpObject;
|
||||||
|
return MUtil.equals(this.getFirst(), derp.getFirst()) && MUtil.equals(this.getSecond(), derp.getSecond());
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CLONE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Couple<A, B> clone()
|
||||||
|
{
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user