Java

Javaジェネリクス再入門

ジェネリクスでは、「型」を変数にした「型変数」というものを取り扱う。型変数で何が嬉しいかというと、メジャーな例ではコレクションAPIが挙げられる。java.util.Listとかjava.util.Mapとかのデータを格納するタイプのユーティリティクラスのことだ。2004…

再帰的ジェネリクスの代入互換性

Javaのややこしいジェネリクスの話をしよう。*1 再帰的ジェネリクス クラスHogeがあったとして、型変数Tを取る。 public class Hoge<T> {} このHogeの型変数Tがextends Hogeとすると public class Hoge<T extends Hoge> {} すると、T extends Hoge の Hoge が raw型だと警告され</t></t>…

生成系デザインパターンをライブラリ化するには

デザインパターンによる定型的な構造を何度も何度もプログラムしていると、デザインパターンそのものをライブラリ化して再利用してしまいたいと考えるようになる。そんなさなかにジェネリクスのテクニックのような型を使うことで実装クラス自身の型を扱うテ…

Java標準APIのソースコードの謎のjavadocタグ

なんとなくJavaのソースコードを調べていたら不思議なものを見つけた。 java.lang.ThreadクラスのisInterrupted()メソッドだ。 /** * Tests whether this thread has been interrupted. The <i>interrupted * status</i> of the thread is unaffected by this metho…

メソッドの最後でしかreturnを書いてはいけない時

柴田 芳樹 (Yoshiki Shibata):So-netブログに出てくる、「メソッドや関数の最後でしかreturn文を書いてはいけないと、プロジェクトの標準として何らかの方法で強制」された場合、機械的な書き換えを行うことで対応することが出来る。 まずは戻り値がvoidの…

Javaバイトコードの読み方

Javaのデバッグをしていて、ステップ実行中にステップインを繰り返したらソースコードのないところに行き当たったことがあるだろう。あるいはEclipseでF3キーでクラスやメソッド・フィールドの宣言元を辿っていってソースコードのないところに行き当たったこ…

Java変態文法最速マスター

Java基礎文法最速マスター - いろいろ解析日記をリスペクト。Javaの変態文法・技法一覧です。Javaの基礎をある程度知っている人はこれを読めばJavaの変態をマスターしてJavaを書くことができるようになっています。簡易リファレンスとしても利用できると思い…

オブジェクト指向と型システムの狭間で例外を考える

「検査例外はアジャイルやオブジェクト指向の考えに反するという事実」について一部誤解あり - じゅんいち☆かとうの技術日誌のあんまりな釣りタイトルにやれやれだぜ、と思いつつも非チェック例外多用作戦のトレードオフ認識 - 都元ダイスケ IT-PRESSでツッ…

2010年版インスタンス生成考

2010年現在のアクセスレベルの限界 - プログラマーの脳みそではpublic, protected, private, パッケージプライベートという4つのアクセスレベルではうまく行かない事例という視点だったけど、例に挙げたDIコンテナ云々というのはアクセスレベルの不備という…

2010年現在のアクセスレベルの限界

前提条件を破った場合、どのような挙動をするのか? - 都元ダイスケ IT-PRESSで言及をもらったので 現代は4つのアクセスレベルでの可視性制御の限界が囁かれていて、打破するためにいろいろ模索しているところ はてなブックマーク - Nagiseのブックマーク /…

Javaはバイナリをごりごりやるのに弱い

プログラミングのジャンルは広いもので、しばらくいじってなかったジャンルを久々に触ると記憶違いとかしてて記憶をリフレッシュさせにゃいかんなぁとか思う今日この頃、みなさまいかがお過ごしでしょうか。僕は風邪で寝込んでました。 PCエンジンエミュレー…

ジェネリクス型変数と型階層

@masaru_b_cl とジェネリクスの話をしていて、継承の際に型変数に具体的な型をバインドして単純化したりするんだよ、みたいな話をしていたのだけど、コード例がないとイメージしにくいと思うのでちょっと書いておこう。 二つの型変数 I, O をもつinterfaceが…

FizzBuzz ループ→再帰→Composite→Strategy→Visitor

最近FizzBuzzをblogで書くといいよみたいな流れになっている(曲解)ので FizzBuzz - 文殊堂 と id:monjudoh が言ったからというわけではないのだけど、FizzBuzzとアルゴリズムの書き換えの話をしよう。 やや昔のエントリになるけどもJavaでFizzBuzzを再帰で作…

型に属する情報をジェネリックに扱う試み

Generics 勉強中 - しげっと! 妥協案 - しげっと! Integer.MAX_VALUE で Integer の最大値をとってくるみたいに、 // このソースはコンパイル通らないので参考にしないでね。 class Values <T> { private T max, min; public Values() { this.max = T.MAX_VAL</t>…

thisるぜ、超thisるぜ

ともくんコードのお話 - プログラミングお勉強きろくのブコメで勝手にthisつけるつけない議論が繰り広げられてたのだけど、自分の意見を少々。*1 自分が新人や、オブジェクト指向慣れしていない人に教える際はthisをつけるところは全てつけるように教えてい…

戦争を終わらせるのに必要なのは1本の動画なんじゃないか?

Javaを使うメリットが分からないという人がいたかいなかったかは知らないが、Java屋さんがガツンと言ったことは「道具を使うと便利だよ」という、とてもシンプルなメッセージだった。*1 僕がIDEの利便性を説いた時*2も「道具を使えばいいなんて」とdisる人が…

JavaVMがリアルマシンにならないわけ

勉強会のセッションやるために大阪に出向いていたのでついでにOFFにも参加してきた。そのときに @ranha にJavaのバイトコードを直接実行できるCPUがあったらどう思うかみたいなことを聞かれた。これがなかなか面白い話題なんだ。 PentiumとかCore 2とかのCPU…

JavaがCより速くなる理由

JavaはCより速かった — ありえるえりあの実測データを興味深く眺めていた。 このあたりのジャンルは僕は専門ではないので聞きかじりになってしまうのだけど、Javaのホットスポットの場合、実行されているCPUなどの情報を元に、環境に合わせた最適化ができる…

Eclipseからテキストエディタに戻れない10の理由

ソフトウェアはいろいろな作業の効率化に貢献してきた。プログラミングという作業も例外ではない。現代の高度なIDE(統合開発環境)はプログラマが単純でつまらない作業に時間を割かずに済むようにさまざまな機能を提供してくれる。 もうテキストエディタ+コ…