結論
文法上は自由だが、慣習としては下記の順序で記述する。(推奨)
- アクセス修飾子 (
public、protected、private、もしくは、何も書かない) staticfinaltransientvolatile
根拠
「Java 言語仕様」の「8.3.1. Field Modifiers」に、下記の記述あり。
If two or more (distinct) field modifiers appear in a field declaration, it is customary, though not required, that they appear in the order consistent with that shown above in the production for FieldModifier.
(日本語訳) フィールド宣言中にフィールド修飾子を複数記述する場合、必須ではないものの、慣習としては 上記の FieldModifier 生成規則に記述された順序で指定する。
- 「
java.lang.reflect.Modifier」の「toString(int mod)」に、下記の記述あり。修飾子名は、『Java(tm)言語仕様』のセクション8.1.1、8.3.1、8.4.3、8.8.3、および9.1.1で指定されている推奨修飾子順序に適合する順序で返されます。
補足
「final」と「transient」の組み合わせは、ほとんどの場合でナンセンス。
「transient」だとデシリアライズ時に null になるが、「final」ならば再代入ができない。
(当該フィールドの値は、デシリアライズ後は 常にnull になる)
例外として、シングルトンなどで、デシリアライズ時に readResolve() でインスタンス自体を読み替えてしまう場合だけは、「final transient」が意味を成す。
0 件のコメント :
コメントを投稿