※当サイトの記事には、広告・プロモーションが含まれます。

JavaでString型のリストや配列のバリデーション、ほぼ考慮されてない件

gigazine.net

言語における「一般化」を人間のように行えるニューラルネットワークの開発に成功したことが、2023年10月25日に科学誌のNatureに掲載された論文で報告されました。

「言語を一般化する人間のような能力を持つニューラルネットワーク」の登場によりAIに革新が起こる可能性 - GIGAZINE

⇧ 知識でなく知性を持てるようになったら、完全に人類の手に負えなくなるんではないかのかね...

ちなみに、

www.hashikura.or.jp

⇧ 上記サイト様で、

  • 知識
  • 知能
  • 知性

の意味の違いについて考察されておりました。

似たような言葉、紛らわしいですが、別物ということですな、そして、AIも人類に取って善き方向に革新されれば良いのですが、「鬼が出るか蛇が出るか」は神のみぞ知るってことかね...

JavaでString型のリストや配列のバリデーション、ほぼ考慮されてない件

ちょっと、驚いたのだけど、配列やリストの中身をバリデーションしたいとなった時に、

stackoverflow.com

www.baeldung.com

⇧ 何か、デフォルトだと、1つしかバリデーションのアノテーションが付けられないっぽくて、複数の種類のバリデーションを効かせたいっていうケースは、独自に頑張ってアノテーションを作る必要があるっぽい...

う~む、何だろう、JDK 21までバージョンが出ているというのに、あるあるなユースケースに対応しないのって何なんでしょうね?

よく、分からんけども、普通に「文字列」に対してのバリデーションって、

  • NULLでないかどうか
  • 空文字でないかどうか
  • 半角のみかどうか
  • 全角のみかどうか
  • 数値のみかどうか
  • 半角英数かどうか
  • 浮動小数かどうか
  • 最大文字数(上限)
  • 最小文字数(下限)
  • 多重度(配列やリストの要素数
  • 正規表現にマッチするかどうか
    • 郵便番号かどうか
    • メールアドレスかどうか
    • 電話番号かどうか
    • 日時(ISO 8601)かどうか
    • 固定長かどうか
    • etc...

ってな感じで、考慮しないといけない様々な種類のバリデーションがあると思うし、ほぼ1つの種類のバリデーションで済むようなケースの方が少ない気がするんだが、配列やリストの要素に対してのバリデーションで複数の種類のバリデーションを利用することが考慮されないのは何故なのか?

一応、

beanvalidation.org

1. Problem

It is useful to be able to apply constraints on elements contained in a so called container. Examples of containers are:

  • Collection

  • Optional

  • JavaFX’s Property

But today the constraints are applied on the container value itself and not its content.

https://beanvalidation.org/proposals/BVAL-508/

⇧ Collectionの各要素に対してバリデーションをしていないのって良くないよね?的な意見は出てたらしい。

でも、結局のところ、配列やリストの要素に対しては、1種類のバリデーションしか付与できないらしいので、

kuneo.org

nainaistar.hatenablog.com

confrage.jp

⇧ 上記サイト様のように独自のアノテーションを定義して、カスタマイズしたバリデーションを適用するようにするしかないらしい...

まとめると、

  1. @Patternで正規表現で頑張る
  2. 独自アノテーション&独自バリデーションを作成して頑張る

のどっちかで凌ぐしか無さそう...

う~む、配列やリストの要素に対して、複数のアノテーションを適用できるようにして欲しいんだけどな...

毎度モヤモヤ感が半端ない...

今回はこのへんで。