@Override
    public boolean equals(final Object obj) {

        if (this == obj) {
            return true;
        }

        if (!(obj instanceof Value)) {
            return false;
        }

        final Value casted = (Value) obj;

        if (!(key == casted.key
              || (key != null && key.equals(casted.key)))) {
            return false;
        }

        if (!(name == casted.name)
            || (name != null && name.equals(casted.name))) {
            return false;
        }

        if (age != casted.age) {
            return false;
        }

        return true;
    }