GenericStruct2.java

package eu.javaexperience.struct;

import java.util.Map.Entry;

import eu.javaexperience.reflect.Mirror;

public class GenericStruct2<A,B> extends GenericStruct1<A> implements Entry<A, B>
{
	public GenericStruct2()
	{
		
	}
	
	public GenericStruct2(A a, B b)
	{
		this.a = a;
		this.b = b;
	}
	
	private static final long serialVersionUID = 1L;
	public B b;
	
	@Override
	public boolean equals(Object e)
	{
		if(!(e instanceof GenericStruct2))
			return false;
		
		GenericStruct2<A,B> s = (GenericStruct2) e;
		
		return Mirror.equals(s.a, a) && Mirror.equals(s.b, b);
	}
	
	@Override
	public int hashCode()
	{
		if(a == null && b == null)
		{
			return 0;
		}
		
		int ret = 31;
		
		if(a != null)
		{
			ret = ret * 17 + a.hashCode();
		}
		
		if(null != b)
		{
			ret = ret * 17 + b.hashCode();
		}
	
		return ret;
	}

	@Override
	public A getKey()
	{
		return a;
	}

	@Override
	public B getValue()
	{
		return b;
	}

	@Override
	public B setValue(B value)
	{
		throw new UnsupportedOperationException("GenericStruct2.setValue is not supported.");
	}	
}