Java

細かすぎて伝わらないJava7の変更点

本日のエントリーはJava Advent Calendarの25日目です。昨日は @mike_neck さんのmike、mikeなるままに…: hamcrestを拡張してmoreThanとか作ってみたでした。本日はクリスマスですが、Advent Calendarはまだまだ続きます。明日はt.ogisawaさんのhttp://webin…

Spring 3.1 の Cache Abstraction(キャッシュの抽象化)

しばらくコード付きのエントリ書いてないなぁ、と思ったので。Springの新機能についてひとつ。Spring3.1は、まだリリース版は出ていないのだけど、RC1が出ている。(参考 Spring 3.1 RC1リリース)その新機能にCache Abstraction(キャッシュの抽象化)って…

nullを受け付けないメソッドにnullを渡した時の挙動

っていう話を書こうと思ってたら、以前書いてた(cf. 前提条件を破った場合、どのような挙動をするのか? - 都元ダイスケ IT-PRESS)上のエントリにも書いたのだが、自分はこういう時IllegalArgumentExceptionを使うようにしている。そして、commons-lang v2…

オブジェクト指向のソースを読むのが難しい理由

ダラダラ書かない予定だよ。ざっくり行くよ。あと、分かってる人には当たり前な事だと思うよ。 あるクラスについて知りたかったら、まずその基底クラスを知れ 例えば、Integerクラスについて知りたいと思ったら、Integer.java だけを読んでいてはダメだ。確…

SerializableとserialVersionUID

以前、Javaのシリアライズ仕様がよくわからなくてエントリを書いた。難解なSerializableという仕様について俺が知っていること、というか俺の理解 - 都元ダイスケ IT-PRESSまぁ、わからないまま書いたので論点もあっちゃこっちゃ飛びながらのエントリだった…

新連載、はじめました「Javaで始めるオブジェクト指向」

最近blogではApache Mahoutを中心にお送りしていますが、日経ソフトウエアでは新連載を担当させて頂くことになりました。先月までは「Javaで始めるプログラミング」でしたが、今月からは「Javaで始めるオブジェクト指向」です。前の連載の続きのようで続きじ…

Javaのcloneは悪者か?

Effective Java 第2版 (The Java Series)作者: Joshua Bloch,柴田芳樹出版社/メーカー: ピアソンエデュケーション発売日: 2008/11/27メディア: 単行本(ソフトカバー)購入: 77人 クリック: 936回この商品を含むブログ (264件) を見るJava: The Good Partsが…

Java: The Good Parts

Java: The Good Parts作者: Jim Waldo,矢野勉,笹井崇司出版社/メーカー: オライリージャパン発売日: 2011/02/24メディア: 大型本購入: 3人 クリック: 148回この商品を含むブログ (37件) を見る来る2/23、オライリーよりJava: The Good Partsという訳本が発売…

UnsupportedOperationExceptionと相続拒否

昨日ご紹介したbaseunitsですが、そのコードを社内コードレビューに掛けた際、id:cobonasからこんな指摘がありました。 package jp.tricreo.baseunits.util; import java.util.Iterator; /** * 明示的に、対象のコレクションに対する操作ができないことを表…

Baseunits Library

さて、Java Advent Calendar -ja 2010 : ATND 10日目。昨日は、id:yuroyoro でした。二日連続で真っ黒な魔術が紹介されたので、ここは真っ白で実用的な奴をひとつ。最近Domain Driven Design(DDD)っていう設計手法が、自分の周辺一部で話題になっている。…

「区間」のソートあれこれ

註:本エントリは等幅フォントで見ないと訳の分からない部分があります。Firefoxではきちんと見えるのですが、Google Chromeではなぜかmonospaceが等幅になりません…。というわけで、本エントリはFirefox推奨。SafariでもOKでした。IEは知らん。さて、昨日の…

数学的な「区間」の話を分かりやすく書いてみる

数学用語に「区間」ってのがある。wikipediaによる解説はこちら。ちなみに、wikipediaって数学系の事しらべると、もう意味わかんないよね、正直w 自分も数学の下地がある人種ではないので、正直数学系の話第だけはwikipediaをアテにできない。まぁ、誰でも…

自分用Maven Archetype

さて、Javaで「何か作ろう」って思った時、みなさんどうします? 書き捨てならば、どうでもいいと思うんですが、少々真面目に作っていこうかな、と思ったら、色々な開発環境整備が大変です。Eclipse+Maven環境で開発をするのが好きな人は、とりあえず mvn ar…

インスタンスを抽象的に扱う

まず「抽象的」という言葉が難しいのかな。俺も最初の頃、一体何なのかわからなかった。プログラムに全く縁もゆかりも無い相方に、オブジェクト指向の話をすこしだけ聞かせたことがあって、「抽象的って、要は大ざっぱってこと?」と問われた。なるほど、良…

イリュージョニストにならないために

前回は「クライアントにとって使いやすいAPI」について語りました。今回は「読みやすい実装」について。ネタ元は同じくSqlExecutor。まず。javadoc厨で契約(仕様)原理主義の立場でいきなり厳しいことを言ってしまえば、「そもそもクライアントに実装を読ま…

クラスがメソッドの実行に必要なインスタンスを手に入れる方法色々

あるクラスが、メソッドによってある役割を果たすためには、別のインスタンスが必要なことが多い。ここでは、具体的にそのクラスを考え、そのインスタンスのを手に入れる方法を比較していこう。ここでは、あるクラスをSqlExecutorとしよう。SQL文を受け取っ…

難解なSerializableという仕様について俺が知っていること、というか俺の理解

java.io.Serializable …、ある程度Javaに触れて来た人は必ず見たことがあるインターフェイスだと思う。私も何度も見てきたし、必要に迫られて自分の作ったクラスにSerializableをつけたこともある。しかし、こいつは一体何なのか?

非チェック例外多用作戦のトレードオフ認識

まず、以下に持論を展開するにあたって、自分の立ち位置を明確にしよう。自分は「Webアプリケーション開発者」としてではなく「JavaによるWebアプリではない(デスクトップアプリ,コマンドラインアプリ,ライブラリ)アプリの開発者」として語る。まぁ、自分…

前提条件を破った場合、どのような挙動をするのか?

「Nullチェックされている前提の処理」とJavadocに書いたとき、「throws NullPo…」は書くんだろうか。んー、コード上は発生しうるけど、実際発生しないから不要なのかな はてなブックマーク - u1tnkのブックマーク / 2009年12月29日 まぁ、このブログで書い…

堅牢なコーディングルールを策定する方法(2)

いやー、なんか怖い人(笑)が見てるようだ。突っ込み激しそうぜよwさて、前回言っていた「判断ロジック」についての答えは各自考えてみただろうか? 各方面の反応を見ると「1〜4どれでしょうか*1」という問いにすり替わっちゃってる気がするけど、テーマは…

堅牢なコーディングルールを策定する方法(1)

「ある処理をするコードを書く」というのは「ある出来事を文章に表現する」のと似ていると思っている。まず表現に使う言語は様々であり、使用人口の大小はあれど、基本的に優劣はない。言語が同じだったとしても、十人十色の表現をし、全く同じ出来事を表現…

「仕様」と「実装の詳細」(2)

繰り返す。Fooクラスを利用するMainクラスを書く時、XはFooの「仕様」に依存すべきであり、Fooの「実装の詳細」に依存すべきではない。 public class Foo { public String bar; public Foo(String bar) { this.bar = bar; } public String getBar() { return…

仕様(インターフェイス)と実装の詳細 (1)

APIの公開/非公開が意識できるようになると共に、「仕様(インターフェイス)」と「実装の詳細」を意識できるようになるとよい。 このクラスの公開APIはどれか、非公開APIはどれか このクラスの仕様(インターフェイス)はどれか、実装の詳細はどれか という…

可視性と公開APIと非公開(内部)APIと

Javaではpublic, protected, default, privateという4種類の可視性がある。Javaを始めてしばらくの間、この4つの使い分けがよくできていなかった。 「外から呼ぶならpublic、呼ばないならprivate」時代 当時から、なるべく可視性は下げた方が良い(オブジェ…

Apache commonsが便利な件(commons-configuration編)

久々のシリーズ。今回はcommons-configuration。設定ファイル、ってありますよね。Javaだとproperties、Windosだとiniファイルが使われる事が多い。複雑なものだとXMLで書いたりする。さて、そんなファイルの読み込み・書き出しってどうしますか。まさかFile…

スマートモデルがアンチパターンなケースもある

http://d.hatena.ne.jp/zetta1985/20091014/1255620654 の「1. 参照」例の、より良い実装より。 この実装だと、hogeListプロパティのカプセル化がいないので、内部を好き勝手にいじられてしまいます。hogeListに意図する型以外の要素を格納されてしまったり…

Throwableについて本気出して考えてみた 2nd Season

1st Seasonはこちら。Throwableについて本気出して考えてみた - 都元ダイスケ IT-PRESS以前は、何かをスローする状況を3つに分けてそれに合った設計をした例外を投げましょう、という考え方を示しました。 callerのバグ: RTE calleeのバグ: Error どちらでも…

オブジェクト指向のプログラムに込める「意図」

その昔、プログラムを覚えたての頃、プログラムってのは単に「処理」を記述するものだと考えていた。処理を1ステップごとに記述し、場合によってはサブルーチンに切り出し、再利用する。今振り返ると、オブジェクト指向を覚え始めてしばらくして、その意識は…

Strict Java Project Plugin 1.0.0

Java開発者であれば、しばしばEclipseでJavaプロジェクトを作ると思います。JDT標準の「Java Project」ウィザードを使う事もあれば、Maven構成のプロジェクトを使うためにarchetypeを使ってmvn eclipse:eclipseをしたり。まあ色んなパターンがあると思います…

Choco Projectのプラグインを勝手にリリースしてみた

自分は、基本的に地豆の人である。ただ、普段の作業でEclipseを使うことが多く、さらにEclipseのプラグインを書けるとなると、ちょっとしたプラグインを書いて使う、という機会がたまにある。先日のActivityTrackerもそんな感じでチョチョっと作ってみたプラ…