package com.brightgenerous.bean; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import com.brightgenerous.commons.EqualsUtils; import com.brightgenerous.commons.HashCodeUtils; import com.brightgenerous.commons.ToStringUtils; public abstract class AbstractBean { @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) protected static @interface Primary { } @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) protected static @interface Fill { class Null { } Class<?> value() default Null.class; } { if (defaultFill()) { BeanUtils.fill(this); } } protected boolean defaultFill() { return true; } protected boolean useHashCodeImplIfResolved() { return false; } protected boolean useEqualsImplIfResolved() { return false; } protected boolean useToStringImplIfResolved() { return false; } @Override public int hashCode() { if (useHashCodeImplIfResolved() && HashCodeUtils.resolved()) { return HashCodeUtils.hashCodeAlt(null, this); } return super.hashCode(); } @Override public boolean equals(Object obj) { if (useEqualsImplIfResolved() && EqualsUtils.resolved()) { return EqualsUtils.equalsAlt(null, this, obj); } return super.equals(obj); } @Override public String toString() { if (useToStringImplIfResolved() && ToStringUtils.resolved()) { return ToStringUtils.toStringAlt(this); } return super.toString(); } }