実行時の処理で十分な場合は、これを試すことができます
public enum ParameterKeys {
SERIAL_NUMBER {
public Class<?> getType() {
return Integer.class;
}
},
SEARCH_KEY{
public Class<?> getType() {
return String.class;
}
},
FROM_DATE{
public Class<?> getType() {
return Date.class;
}
},
ISVALID{
public Class<?> getType() {
return Boolean.class;
}
};
public abstract Class<?> getType();
}
public class Parameter {
private Object value;
private Class<?> clazz;
private ParameterKeys key;
public Parameter(Object value,ParameterKeys key) throws Exception {
this.key = key;
setValue(value);
}
public void setValue(Object value) throws Exception{
this.value = value;
this.clazz = value.getClass();
if(!clazz.getCanonicalName().equals(key.getType().getCanonicalName())) {
throw new Exception("Type Mismatch between Parameter Key : " + key + " and Value : " + value);
}
}
public Object getValue() {
return clazz.cast(value);
}
}
public class Main {
public static void main(String[] args) {
Map<ParameterKeys,Parameter> _params = new HashMap<ParameterKeys, Parameter>();
try {
_params.put(ParameterKeys.SERIAL_NUMBER, new Parameter(1,ParameterKeys.SERIAL_NUMBER));
_params.put(ParameterKeys.SEARCH_KEY, new Parameter("query",ParameterKeys.SEARCH_KEY));
_params.put(ParameterKeys.FROM_DATE, new Parameter(new Date(),ParameterKeys.FROM_DATE));
_params.put(ParameterKeys.FROM_DATE, new Parameter(true,ParameterKeys.FROM_DATE));
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
これにより、次の例外が出力されます
パラメータのキー: FROM_DATE と値: true の型の不一致