2017-12-19 13 views
4

私はJDK9のjshellで作業しています。最終変数がjshellでうまく機能しない

私はただ、最終的な変数を作成し、それに値を割り当てます。 そして、次の行で私はちょうど値を変更しました。そして私の驚いたことに、最終変数を変更するときにエラーはありませんでした。ここで

は、コードスニペットです:

jshell> final int r = 0; 
| Warning: 
| Modifier 'final' not permitted in top-level declarations, ignored 
| final int r = 0; 
| ^---^ 
r ==> 0 

jshell> r = 1; 
r ==> 1 

jshell> System.out.println("r = "+r) 
r = 1 

がjshellから期待されているもの、それか?またはjshellで最終変数を扱う他の方法がありますか?トップレベルで、最終的な変数を作成中

答えて

5

を実施することになっていません。しかし、私はそのような使用法を制限する厳しい方法はないと思います。ドキュメントから

JShell.eval

周り修飾publicprotectedprivatestatic、およびfinalOPレベルの宣言では許可されていないと警告でを無視しています。

シンクロナイズド、ネイティブ、抽象的、そしてトップレベルのメソッドをデフォルトでは許可され ではなく、エラーです。

宣言の前の定義が 上書きされた場合、その状況を示すイベントがあるでしょうが、すでに 上書き宣言を、ドロップされたため、これは発生しません、 上書きに変更拒否、または。次のように冗長モードでjshellを実行すると警告が上記

は非常に目に見える:

enter image description here

関連する問題