結論
文法上は自由だが、慣習としては下記の順序で記述する。(推奨)
- アクセス修飾子 (
public
、protected
、private
、もしくは、何も書かない) static
final
transient
volatile
根拠
「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 件のコメント :
コメントを投稿