タグ

ブックマーク / nagise.hatenablog.jp (4)

  • 贖罪のイレイジャ - プログラマーの脳みそ

    Javaのジェネリクスでしばしば話題に上がる「イレイジャ」について整理しておきたい。 イレイジャについては僕もいろいろと誤解しており、過去に誤った発言をしている。エントリはその贖罪として書かれたものである。 「イレイジャ」という方式についてはネガティブな誤解が広まっていると思う。「イレイジャ方式」が問題の根ではない事象について、それを「イレイジャのせい」であると誤って理解することはエンジニアとしてはマイナスである。 しばしばイレイジャのせいとされる事象にnew T()できないという論点があるが、これはJavaのジェネリクスがC#でいうnew制約(型変数の制約としてデフォルトコンストラクタを持つことを要求する機能)を持たないことに起因する問題である。 そのため、この点についてJavaの言語仕様に改善を求めるのであれば、new制約を導入せよという現実的な要求とするべきである。 イレイジャ方式

    贖罪のイレイジャ - プログラマーの脳みそ
  • Javaの型システムとコンストラクタ - プログラマーの脳みそ

    今回はJavaの型システムのコンストラクタについて考えてみたい。 Javaの型システム、あるいはJavaのオブジェクト指向において、コンストラクタという存在は特殊な存在だ。 コンストラクタ内からはそのクラスのインスタンスフィールドにアクセスできる。これは通常のインスタンスメソッドと同等のスコープであってstaticメソッドのそれとは異なる。しかし、コンストラクタを呼び出すにあたってはインスタンスのメソッドという体ではなく、staticメソッドのように(インスタンスではなく)クラスに属するものとして呼び出すことになる。(もっともnewという専用のキーワードを用いるのでそうは見えないかもしれないが) クラスやinterface、つまりJavaの「型」によるポリモフィズムの世界を考えるとき、コンストラクタはのけものである。継承関係を持つクラスであってもコンストラクタは継承されないし、オーバーライ

    Javaの型システムとコンストラクタ - プログラマーの脳みそ
    clavier
    clavier 2014/08/14
  • ジェネリクスによるVisitorパターン拡張の考察 - プログラマーの脳みそ

    先日twitterで "Expression Problem" という問題を知った。 静的な型付けの下で、場合分けのデータ構造に対して、新しい場合分けとその場合に対する新しい処理を、元のソースコードに手を加えることなく拡張定義すること 2009-05-16 この問題が意図するところを語るにはまずオブジェクト指向から流れを辿らねばなるまい。 オブジェクト指向のポリモーフィズム Javaのようなオブジェクト指向の言語で、ある特定のメソッドがあることを抽象クラスHogeで保証するとしよう。 public interface Hoge { void hoge(); } このとき、機能性、つまりメソッドというのは増えることがない固定のものだが、継承して実装されたクラスというのは自由に増やすことができる。そして、抽象型Hogeを扱っている既存コードは修正する必要がない。 これはいわゆる開放/閉鎖原則(

    ジェネリクスによるVisitorパターン拡張の考察 - プログラマーの脳みそ
  • ProxyパターンとProxyクラスと黒魔術 - プログラマーの脳みそ

    Java Advent Calendar 2011 の18日目です。 17日目の記事は JavaEE使ってウェブアプリケーションつくろうよ - 水まんじゅう2、 19日目はJavaエバンジェリストの寺田さんですよ。乞うご期待。 プロローグ 後:「先輩、いまさらなんですけど上からSQLの遅いところを調査してくれって依頼がきてて、全クエリの実行時間を実データで集計とれと言ってるんですけど。これ、SQL発行前後で時間計測するしかないですかねー。このプロジェクトどんだけクエリ発行してるところあるんだろ…。簡単にやれないですかね。とりあえず調査に1週間かかるって返答しちゃいましょうか」 先:「まぁまて。全部のクエリにもれなく時間計測のコードを挿し込むとかやってられんし、手作業で漏れも発生するだろ。こういうのはオブジェクト指向で解決するのがスマートだ。あ、とりあえず調査に1週間かかるとは返答しておけ」

    ProxyパターンとProxyクラスと黒魔術 - プログラマーの脳みそ
  • 1