Kotlinでstaticメソッドが定義できるようになったのでJAX-RSリベンジ

ことりん〜(挨拶)

これは Kotlin Advent Calendar 2014 の14日目です。

夏の終わりに 関西Kotlin勉強会 を開催し、私はKotlinでJAX-RSをやるという発表をしました。 JAX-RSにいくつかあるリクエストパラメータの受け取りかたのうち 「Stringの引数をひとつだけ受け取る”valueOf”という名前のstaticファクトリメソッドを持つクラス」 が実現できませんでした。 そのときのKotlinのバージョン(M7)ではstaticメソッドが定義できなかったからです。

しかしバージョンM9からplatformStaticアノテーションを使用してstaticメソッドを定義できるようになったようです。

というわけでリベンジしました。 次のような感じで書けます。

package app

import kotlin.platform.platformStatic

public class ValueObj private (val value: String) {
  class object {
    platformStatic fun valueOf(value: String) = ValueObj(value)
  }
}

Kotlinの思想がどうあれJava言語、または既存のJavaライブラリとの共存を考慮するとstaticメソッドの 定義は必要だろうなーと思っていたのでこの機能追加は良いと思います。

個人的にはstaticファクトリメソッドを持つバリューオブジェクトを多用するので大変助かります。

おしまい。

今日のコード

Tinkererにはてなスターを設置した

Tinkerer で書いてるこのブログに はてなスター を設置したのでその辺まとめておきます。 なお、私は modern5 をベースにカスタマイズしたテーマを使用していますので別のテーマだと多少異なるかも知れません。

まずはてなスターのマイページでブログを登録します。 マイページのURLは http://s.hatena.ne.jp/<自分のID> です。

次に _templates/page.html のextraheadブロック( {%- block extrahead -%}{%- endblock -%} に囲まれたところ)に次のJavaScriptコードを書きます。

<script type="text/javascript">
   Hatena.Star.Token = <自分のトークン>;
   Hatena.Star.SiteConfig = {
     entryNodes: {
       'div.main-container': {
         uri: 'window.location',
         title: 'document.title',
         container: 'span.hatenastar'
       }
     }
   };
</script>

<自分のトークン> にはマイページでブログを追加したあとに表示されるトークンを書いてください。

最後に実際にはてなスターを設置する場所となる要素を追加します。 私はエントリのいっちゃん下に置きたかったのでbodyブロックの最後の方に次のspan要素を書きました。

<span class="hatenastar"> </span>

自分のTinkererちからが低すぎて悩んだりもしたけれど、出来てしまえば簡単でした!

より詳しくは http://d.hatena.ne.jp/hatenastar/20070707 を参照くださいですじゃ。