package com.miguelfonseca.completely.data;
import java.util.Objects;
import javax.annotation.Nullable;
import static com.miguelfonseca.completely.common.Precondition.checkPointer;
/**
* Decorator for scoring any object.
*/
public class ScoredObject<T> implements Comparable<ScoredObject>
{
private final T object;
private final Double score;
/**
* Constructs a new {@link ScoredObject}.
*/
public ScoredObject(@Nullable T object, double score)
{
this.object = object;
this.score = score;
}
/**
* Returns the decorated object.
*/
public T getObject()
{
return object;
}
/**
* Returns the score.
*/
public double getScore()
{
return score;
}
@Override
public int compareTo(ScoredObject other)
{
checkPointer(other != null);
return Double.compare(other.score, score);
}
private boolean equals(ScoredObject<?> other)
{
assert other != null;
return Objects.equals(object, other.object) && Objects.equals(score, other.score);
}
@Override
public boolean equals(Object other)
{
if (other == this)
{
return true;
}
if (!(other instanceof ScoredObject))
{
return false;
}
return equals((ScoredObject<?>) other);
}
@Override
public int hashCode()
{
return Objects.hash(object, score);
}
}