package org.etk.reflect.core; import org.etk.reflect.api.TypeInfo; import org.etk.reflect.api.Visitor; import org.etk.reflect.api.VisitorStrategy; import org.etk.reflect.api.relationship.TypeRelationship; public abstract class AbstractTypeInfo<T, M, A, P, F> extends ReflectedObject<T, M, A, P, F> implements TypeInfo { public AbstractTypeInfo(TypeResolverImpl<T, M, A, P, F> domain) { super(domain); } @Override public abstract int hashCode(); @Override public abstract boolean equals(Object obj); public final <V extends Visitor<V, S>, S extends VisitorStrategy<V, S>> void accept(S strategy, V visitor) { strategy.visit(this, visitor); } public final boolean isSubType(TypeInfo ti) { return TypeRelationship.SUB_TYPE.isSatisfied(this, ti); } }