2015/11/09

[android]Java8への思いやりを形に

なんだ、このタイトルは・・・。

前回、Android Studioが勝手に記述を省略して困る、という記事を書いた。
そしたら、こういうコメントをいただいた。

http://hiro99ma.blogspot.com/2015/11/android.html?showComment=1446991568776#c6414886133621877454
>Runnableが消える などは、Java8を意識したIDEの優しさみたいです。

優しさ、か。
ふっ、私にはなかなか縁のない言葉だ。

では、その思いやりを、IDEだけではなく、私が形にしてやらないと。


どうやら、これはラムダ式、とかいうものらしい。
Lambdaって書くけど、いっつもランバダと思ってしまうのよねぇ。
それはともかく、ある条件が揃うと、記述を省略できる、と私は読めた。

無名クラスで、メソッドが1つしかない、みたいなのが相当するようで、Runnableはrun()しかないため該当するようだ。
実際に書いてみると、エラーになった。

image

赤い電球アイコンが出てきて、それっぽい選択肢があったので選ぶと、エラーではなくなった。
でも、プロジェクトを閉じて開くと、またエラーになる。
そこでまたメニューを出して選ぶと、エラーじゃなくなる。
その状態でコンパイルすると、エラーになった。

image

Project Structureの、Modules>ApplicationのPropertiesタブで、"Source Compatibility"と"Target Compatibility"の候補に"8"がなかったので、手で打ち込んでみたが、やはりエラーになる。

image

なんだよー、あんたが8以上にしろっていったんじゃないかー

 

「ふん、あの葡萄は酸っぱいんだ」
私はそうつぶやいて、IDEを閉じた。

4 件のコメント:

  1. retrolambdaを使うとコンパイルできますよ。
    https://github.com/orfjackal/retrolambda

    返信削除
    返信
    1. ありがとうございます。
      レトロ・ラムダ、ですか。
      Java8の新しいAPIにはbackportできない、と書いてますね(backportは逆移植?)。
      ああ、今のAndroid StudioではJava7になっているから、それに対応する、という役割なんですかね。

      それにしても、新しい言語仕様が追加した実装でなんとかなるというのは、なかなか不思議な感覚です。
      いつも使っているC/C++だったら、プリプロセスとかで対応するけど、そういうイメージなのかなぁ。

      削除
  2. 返信
    1. いや、意外といますって!
      https://www.google.co.jp/search?q=lambda%E5%BC%8F+%E3%83%A9%E3%83%B3%E3%83%90%E3%83%80&ie=utf-8&oe=utf-8&hl=ja
      うーん、微妙な数だった・・・。

      削除

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。