タグ

ブックマーク / lethevert.hatenadiary.org (3)

  • Java: ダイナミックプロキシ - lethevert is a programmer

    スクリプト言語の方面からは不評なJavaですが、その1つにはリフレクションが使いにくいとかいうのがあるそうです。 そういうことは、ダイナミックプロキシのことを知ってから言うのも悪くないと思うので、簡単な紹介を。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/reflection/proxy.html この機能を使えば、smalltalkの#doesNotUnderstandやrubyのmethod_missingのような機能が(インターフェースを宣言しなければならないという制限はあるものの)実現できます。 たとえば、次のようにすることで、インターフェースを引数に渡すと、呼び出されたメソッドのメソッド名を標準出力に出力するだけのオブジェクトを生成して返します。この例では、java.sql.Connectionのオブジェクトを作って、適当にメソ

    Java: ダイナミックプロキシ - lethevert is a programmer
  • Java : Generator - lethevert is a programmer

    PythonのGeneratorみたいなものをJavaで作ってみようと思った。Javaには物のマルチスレッドがあるのだから、Generatorくらいは当然作れるのだけれど、いざちゃんと協調動作させようとすると上手く書けなくてあきらめる人とか多いのじゃないかとか思ったので。 実装上は2つのスレッドを協調動作させているのだけれど、使っている側からは1つのスレッドが交互に制御を移しているような感覚で使えます。 これがサンプルコード。 public class GenMain{ public static void main (String[] args) { Generator<String> g = new Generator<String>(new Call()); String s = "開始"; i = 0; do{ System.err.println(i); System.err.

    Java : Generator - lethevert is a programmer
  • クロージャ - lethevert is a programmer

    [id:m-hiyama:20070523:1179888512] はてなのキーワードにクロージャを登録した人です。(駄洒落は私の仕業ではありません) クロージャってバズワードですよね。なので、人によって使い方がまちまちなような気がするのですが、プログラミング言語の機能としての意味における伝統的な(と私が理解している)クロージャの意味についてという注釈付きですという前置きをおいて。 あと、クロージャといえば、今ではレキシカルクロージャのことがほとんどなので、そっちに限定します。 キーワードの説明を書いたり、当ブログで昔クロージャの意味に付いて盛り上がったりしたころから比べると、だいぶ知識が深くなったので、もう少しましな説明になることを祈りつつ・・・ - ラムダ式に含まれる自由変数をどのように扱うかという問題で、その自由変数を字句上での環境に束縛して取り扱うことや、そのルールの元に生成され

    クロージャ - lethevert is a programmer
  • 1