回答編集履歴
1
s/実施的に/実質的に/g
test
CHANGED
@@ -246,7 +246,7 @@
|
|
246
246
|
|
247
247
|
|
248
248
|
|
249
|
-
PersonComaratorByAgeクラスがなくなり、Colletions.sortの引数を渡すところで、同じ実装がそのまま書かれました。この場合ですと、使っているところで、どのようなソートをしているかの実装があるので、
|
249
|
+
PersonComaratorByAgeクラスがなくなり、Colletions.sortの引数を渡すところで、同じ実装がそのまま書かれました。この場合ですと、使っているところで、どのようなソートをしているかの実装があるので、年齢の若い順にソートか、とすぐにわかります。余計なクラス定義も無くなりますし、クラス管理もしなくても良くなります。他でも利用とかはできなくなりますが、もし、この場所で使わなければ、特に問題はありません。
|
250
250
|
|
251
251
|
|
252
252
|
|
@@ -330,7 +330,7 @@
|
|
330
330
|
|
331
331
|
|
332
332
|
|
333
|
-
さて、匿名クラスおよびラムダ式でかけば、とてもすっきり書けることがわかったと思います。しかし、もう一つの利点があります。それは、**finalまたは実
|
333
|
+
さて、匿名クラスおよびラムダ式でかけば、とてもすっきり書けることがわかったと思います。しかし、もう一つの利点があります。それは、**finalまたは実質的にfinalなローカル変数を内部で使用できる**ということです。
|
334
334
|
|
335
335
|
|
336
336
|
|
@@ -388,11 +388,11 @@
|
|
388
388
|
|
389
389
|
|
390
390
|
|
391
|
-
しかし、Javaのクロージャーには制限があります。それは、変数がfinal、または、実
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
※5 このfinalまたは実
|
391
|
+
しかし、Javaのクロージャーには制限があります。それは、変数がfinal、または、実質的にfinalで無ければならないと言うことです。実質的にfinalとは、宣言時にfinalがなくても、finalが付いているものとして見なすことができるものを言います。暗黙的なfinalがついていると言った方がいいでしょう。なお、実質的にfinalなローカル変数に代入しようとすると、ラムダ式や匿名クラス内部での使用と矛盾するため、コンパイルエラーになります。(※5)
|
392
|
+
|
393
|
+
|
394
|
+
|
395
|
+
※5 このfinalまたは実質的にfinalという制限は、Java特有のもので、ほとんどの言語のクロージャーではそのような制限がありません。そのため、私は個人的に、Javaのこの機能はクロージャーでは無く、クロージャー擬きと考えています。
|
396
396
|
|
397
397
|
|
398
398
|
|