這裏是實現這一目標的典型方式:我覺得這個解決方案是醜陋的如何在我的方法輸入參數上放置驗證約束?
public void myContractualMethod(final String x, final Set<String> y) {
if ((x == null) || (x.isEmpty())) {
throw new IllegalArgumentException("x cannot be null or empty");
}
if (y == null) {
throw new IllegalArgumentException("y cannot be null");
}
// Now I can actually start writing purposeful
// code to accomplish the goal of this method
。您的方法會快速填寫樣板代碼,檢查有效的輸入參數合約,從而模糊了方法的核心。
這裏想什麼,我有:
public void myContractualMethod(@NotNull @NotEmpty final String x, @NotNull final Set<String> y) {
// Now I have a clean method body that isn't obscured by
// contract checking
如果這些標註看起來像JSR 303/Bean驗證規格,那是因爲我借了他們。不幸的是,他們似乎並不這樣工作;它們用於註釋實例變量,然後通過驗證器運行對象。
哪個many Java design-by-contract frameworks提供了最接近我的「喜歡有」的例子?拋出的異常應該是運行時異常(如IllegalArgumentExceptions),因此封裝不會被破壞。
Preconditions.checkArgument(!x.isEmpty())。 – 2009-11-27 16:57:36
啊哈,總是有幫助圖書館的創造者在手:) – 2009-11-27 22:14:22