アノテーションによるアサーション(その7 @NotEmpty 編)
@NotEmptyアノテーション
対象がnullでない、かつ、空でないことを保証するためのアノテーションです。現在は、CharSequence(String や StringBuilder等), Collection(Set や List等), 配列型をサポートしています。空の定義は以下のようになります。
- size が 0 の Collection
- length が 0 の CharSequence
- length が 0 の配列
例
以下に @NotEmpty アノテーションの例を示します。
ウィービング可能な例
// 引数が CharSequence の例その1。 // 引数として null や length が 0 の値を代入すると AssertionError が throw されます。 public void set(@NotEmpty String value) { } // 引数が CharSequence の例その2。 // 引数として null や length が 0 の値を代入すると AssertionError が throw されます。 public void set(@NotEmpty StringBuilder value) { } // 引数が Collection の例その1。 // 引数として null や size が 0 の値を代入すると AssertionError が throw されます。 public void set(@NotEmpty Collection<Object> value) { } // 引数が Collection の例その2。 // 引数として null や size が 0 の値を代入すると AssertionError が throw されます。 public void set(@NotEmpty List<Object> value) { } // 戻り値が CharSequence の例その1。 // 戻り値として null や length が 0 の値を返そうとすると AssertionError が throw されます。 @NotEmpty public String getString() { return "dummy"; } // 戻り値が CharSequence の例その2。 // 戻り値として null や length が 0 の値を返そうとすると AssertionError が throw されます。 @NotEmpty public StringBuilder getStringBuilder() { return new StringBuilder("dummy"); } // 戻り値が Collection の例その1。 // 戻り値として null や size が 0 の値を返そうとすると AssertionError が throw されます。 @NotEmpty public Collection<?> getCollection() { return Arrays.asList(new Object[1]); } // 戻り値が Collection の例その2。 // 戻り値として null や size が 0 の値を返そうとすると AssertionError が throw されます。 @NotEmpty public List<?> getList() { return Arrays.asList(new Object[1]); }
ウィービング不可能な例
以下の場合は、バイトコードに対してウィービングを試みる段階でエラーとなります。
// 引数が非対応の型 public void set(@NotEmpty int value) { } // 戻り値が非対応の型 @NotEmpty public Object get() { return new Object(); }