package io.dico.dicore.command.parameter.type; import java.lang.annotation.Annotation; /** * An interface for an object that stores parameter types by {@link ParameterKey} and finds appropriate types for {@link ParameterKey parameterKeys} */ public interface IParameterTypeSelector { ParameterType selectExact(ParameterKey key); // ParameterType selectExactOrSubclass(ParameterKey key); ParameterType selectAny(ParameterKey key); default ParameterType selectExact(Class returnType) { return selectExact(returnType, null); } default ParameterType selectExact(Class returnType, Class annotationClass) { return selectExact(new ParameterKey(returnType, annotationClass)); } /* default ParameterType selectExactOrSubclass(Class returnType) { return selectExactOrSubclass(returnType, null); } default ParameterType selectExactOrSubclass(Class returnType, Class annotationClass) { return selectExactOrSubclass(new ParameterKey(returnType, annotationClass)); } */ default ParameterType selectAny(Class returnType) { return selectAny(returnType, null); } default ParameterType selectAny(Class returnType, Class annotationClass) { return selectAny(new ParameterKey(returnType, annotationClass)); } void addType(boolean infolessAlias, ParameterType type); }