66507


Javaの`アノテーション`で

`@GeneratedValue(strategy=GenerationType.IDENTITY)`

という書き方や

`@Qualifier("beanB2")`

という書き方を見ます。

  * `()` で囲まれているところの名称は `引数` でよいのでしょうか？
  * `(strategy=GenerationType.IDENTITY)` とイコールを用いてるところの名称は `名前付き引数` でよいのでしょうか？


CC BY-SA 4.0
2020-05-11T03:11:31.163
66499
2020-05-11T08:23:19.597
9008
question
java annotations
Javaのアノテーションの引数ぽいところについて


アノテーションのパラメータの話ですね。  
引数というか、メンバを指定して実行する形です。ご認識の通り xxx= のxxxはメンバ名です。


CC BY-SA 4.0
2020-05-11T05:30:41.850
66501
2020-05-11T05:30:41.850
10174
66499
answer

  * _**() で囲まれているところの名称は 引数 でよいのでしょうか？**_

[Javaの公式仕様](https://docs.oracle.com/javase/specs/jls/se14/html/jls-9.html#jls-
NormalAnnotation)に示された文法では、その部分は`ElementValuePairList`と表現されていますね。

> _**`NormalAnnotation:`**_  
>  _`@ TypeName ( [ElementValuePairList] )`_

(ちなみにElementと言うのは、正確には、[`Annotation Type
Element`](https://docs.oracle.com/javase/specs/jls/se14/html/jls-9.html#jls-9.6.1)で、アノテーションの`@interface`宣言において、個々のメンバー変数に相当する部分をこう呼ぶようです。)

  * _**(strategy=GenerationType.IDENTITY) とイコールを用いてるところの名称は 名前付き引数 でよいのでしょうか？**_

同じく`ElementValuePair`と表現されています。

> _**`ElementValuePair:`**_  
>  _`Identifier = ElementValue`_

* * *

ちなみに「識別子=」がつかないのは、[`SingleElementAnnotation`](https://docs.oracle.com/javase/specs/jls/se14/html/jls-9.html#jls-
SingleElementAnnotation)と呼ばれる特殊な場合に限るのですね。

> _**`SingleElementAnnotation:`**_  
>  _`@ TypeName ( ElementValue )`_

* * *

構文仕様を定義する部分では、文法的に[メソッドの仮引数を表す`FormalParameter`](https://docs.oracle.com/javase/specs/jls/se14/html/jls-8.html#jls-
FormalParameter)なんかと混同されては困るからかもしれませんが、とりあえず、ParameterやArgumentという語は使用されていませんでした。

ただ、大抵のJavaの解説記事ではParameterと書かれていたので、日本語で「引数」と言ったって全然構わないように思います。

ちなみに[Javaの公式チュートリアル](https://docs.oracle.com/javase/tutorial/java/annotations/basics.html)には、ParameterやArgumentという言葉は出てきませんが、`name`,
`named`, `unnamed`という言い方も使われています。

> If there is just one element named `value`, then the name can be omitted, as
> in:
>
> The annotation can include elements, which can be named or unnamed, and
> there are values for those elements:

と言うわけで、仕様的にカチンと決まったものを表す用語、と言う意味でなければ、「名前」「名前付き」「名前無し」と言う言い方をするのもまたありだろうと思います。

  * 特に仕様としての文法に拘らない部分では、「引数」「名前付き引数」と言ったって良いだろう
  * ただし、「名前無し引数」が使えるのは`value`という名前のElementが1つだけの場合

という感じでしょうか。


CC BY-SA 4.0
2020-05-11T08:23:19.597
66507
2020-05-11T08:23:19.597
2020-06-17T08:14:45.997
-1
13972
66499
answer