Quantcast
Channel: ひしだまの変更履歴
Viewing all articles
Browse latest Browse all 253

ローカルクラスのコンストラクター参照のバグ?

$
0
0

なんか、Java8のローカルクラスのコンストラクター参照にバグがあるっぽい。

Air_Holdさんがコンストラクター参照のコンパイルエラーについてツイートしていた。
これを見て、最初は「内部クラスはコンストラクター参照(内部クラス::new)が出来ない」という事かと思って、「それは試したことが無かったなーなるほど面白い」と思ったんだけど、違ったorz
内部クラス(クラスの中でクラスを定義する)のコンストラクター参照は実施できて、ローカルクラス(メソッドの中でクラスを定義する)の場合に問題がある。
しかもjavacではコンパイルエラーになるのに、Eclipse(Windows)ではコンパイルが通る。実行も出来る。(Air_Holdさんの環境ではコアダンプになる事があるらしい

ちょっとググったら、stackoverflowにも同様の問題が挙がっているのを見つけた。
それによると、JLS(Java言語仕様)では内部クラスのコンストラクター参照について明記されていないので、javacとEclipseのどちらが正しいのかは何とも言えないようだ。
(と読んだんだけど、英語が苦手なので、本当かどうか不明(爆))

普段ならOracle JDKのjavacの方が正しいはずだと思うんだけど、この件ではどうもEclipseの方が正しい気がする。内部クラス(インナークラス)と局所クラス(ローカルクラス)のどちらも同じ挙動になるはずだと思うので。
ラムダ式ならjavacでもEclipseでも問題ないし、コンストラクター参照も内部クラスで出来ているんだから、局所クラスで出来ないのはおかしい気がする。
とは言え仕様に書かれていないなら、「実は内部クラスでコンストラクター参照が出来る方がバグです」という事も考えられなくは無い。 

後はJavaに詳しい人にお任せかな^^;


Viewing all articles
Browse latest Browse all 253

Trending Articles