Я сказал бы, что простое решение будет состоять в том, чтобы перенести объект и делегировать, содержит вызов к набору перенесенного класса. Это подобно компаратору, но не вынуждает Вас отсортировать получающийся набор, можно просто использовать ArrayList.contains ().
public class Widget {
private String name;
private String desc;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
public abstract class EqualsHashcodeEnforcer<T> {
protected T wrapped;
public T getWrappedObject() {
return wrapped;
}
@Override
public boolean equals(Object obj) {
return equalsDelegate(obj);
}
@Override
public int hashCode() {
return hashCodeDelegate();
}
protected abstract boolean equalsDelegate(Object obj);
protected abstract int hashCodeDelegate();
}
public class WrappedWidget extends EqualsHashcodeEnforcer<Widget> {
@Override
protected boolean equalsDelegate(Object obj) {
if (obj == null) {
return false;
}
if (obj == getWrappedObject()) {
return true;
}
if (obj.getClass() != getWrappedObject().getClass()) {
return false;
}
Widget rhs = (Widget) obj;
return new EqualsBuilder().append(getWrappedObject().getName(),
rhs.getName()).append(getWrappedObject().getDesc(),
rhs.getDesc()).isEquals();
}
@Override
protected int hashCodeDelegate() {
return new HashCodeBuilder(121, 991).append(
getWrappedObject().getName()).append(
getWrappedObject().getDesc()).toHashCode();
}
}
От 'man AF_UNIX':
Допустимые типы: SOCK_STREAM для потокового сокета и SOCK_DGRAM для сокета, ориентированного на дейтаграммы, который сохраняет сообщение границы ( как и в большинстве реализаций Unix, сокеты дейтаграмм домена Unix всегда надежны и не меняют порядок датаграмм );