我正在嘗試爲我的Java應用程序開發靜態驗證方法。我使用了驗證器對象,並使用validate(T data)
方法和枚舉來存儲它們。跟隨我的代碼片段。嘗試調用方法時遇到仿製藥問題
public enum ValidationType {
TAX_CODE(null); // FIXME
private final DataValidator<?> validator;
private ValidationType(DataValidator<?> validator) {
this.validator = validator;
}
}
public static <T> void validate(T data, ValidationType dataType) {
dataType.validator.validate(data);
}
private static abstract class DataValidator<T> {
public abstract Class<T> getType();
public abstract void validate(T data);
}
當編輯,使用Eclipse,我當我調用validate方法(線dataType.validator.validate(data);
)得到了一個錯誤。
Eclipse中說:
的方法驗證(?捕獲#3的)在類型ValidationUtil.DataValidator不適用於
我不明白這個messaga參數(T) 。如果可能的話,我如何修改或修改代碼以使其可用?
非常感謝您的意見和建議。
演員不幸使得它使代碼不是類型安全了。 – Jesper
由於枚舉本身不是通用的,這是觸發驗證的起點,所以它無論如何都不可能是安全的。我認爲可以做到,如果你用類替換枚舉。 – john16384
是的,這是Java中枚舉的一個不幸的限制。有一個[允許枚舉具有類型參數的提議](http://openjdk.java.net/jeps/301),所以這可能會在未來的Java版本中發生變化。 – Jesper