2014年10月22日水曜日

Java8のFunctionalInterfaceアノテーション

FunctionalInterfaceは、関数型インタフェースであることを示すために使用するアノテーション。

基本的に、関数型インタフェースの要件(インタフェースで抽象メソッドは1つなど・・・)を満たしていれば良いが、
FunctionalInterfaceアノテーションを付加するとコンパイル時に関数型インタフェースの要件を満たしていない場合コンパイルエラーとしてくれる。
また、このインタフェースが関数型インタフェースであることが、明確なので関数型インタフェースにはこのアノテーションを付加するとよい。

例えば、以下の様なインタフェース定義は関数型インタフェースの要件を満たさないためコンパイルエラーとなる

@FunctionalInterface
interface Hoge {
    void hoge();
    void fuga();
}

エラー内容としては以下の様なものが出力される。
Error:(1, 1) java: 予期しない@FunctionalInterface注釈
  Hogeは機能インタフェースではありません
    インタフェース Hogeで複数のオーバーライドしない抽象メソッドが見つかりました

2014年10月5日日曜日

[jQuery]first-of-typeセレクタ

バージョン1.9から追加されたセレクタ。

親要素内で、セレクタで指定した要素が最初に出現する要素が選択される。

この例だと、div要素内で最初に出現するspanタグが選択される。
(hogeとあいうえおのspanタグ)
<div>
  <span>hgoe</span>
  <span>fuga</span>
</div>
<div>
  <span>あいうえお</span>
  <span>かきくけこ</span>
  <span>さしすせそ</span>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
  $("span:first-of-type").css({
    color: 'red'
  });

</script>

表示結果

選択された最初のspanタグにスタイルが設定されているのがわかる。

※first-of-typeと逆のlast-of-typeセレクタもある。