Java

敢えて規約を破るケース(FindBugsの警告抑制)

の情報も探してみた。が、こちらは結構難しい。Checkstyleは、*.javaを解析してチェックします。なので、コメントに反応できる。しかしFindBugsはコンパイル後の *.class がチェック対象です。なのでコメントでFindBugsを制御することはできません。従って、…

敢えて規約を破るケース(Checkstyleの警告抑制)

先日の日経ソフトウエア記事で、「規約は大事だが、可読性や保守性を高めるためにあえて例外的に規約を破るケースもある」ということを説明しました。しかし、Checkstyleは情け容赦なく、違反を摘発します。数が少ないうちは良いのですが、多くなってくると…

JUnitの@Ignore

@Ignore - プログラミングお勉強きろくたまに使いますね〜。仕様を決めてテストで定義したけれど、まだ実装が済んでいない時とか。 @Ignore("Foo#bar()が不完全。実装が終わったら外す。") とか。ただ、個人的にこのアノテーション、default "" をつけないで…

hamcrestのMatcherメモ

技術ネタじゃないところで盛り上げてしまった。技術ネタいこう、技術ネタ。さて、JUnitを使う際、hamcrestライブラリを使って、英語として読めるようなassertionを書く、なんてのは流行ってたり流行っていなかったり?JUnit4限定だけれど、assertionの際、as…

Javadocの書き方本!

即ポチですよ、こりゃ。エンジニアのためのJavadoc再入門講座 現場で使えるAPI仕様書の作り方作者: 佐藤竜一出版社/メーカー: 翔泳社発売日: 2009/06/30メディア: 単行本(ソフトカバー)購入: 15人 クリック: 263回この商品を含むブログ (49件) を見る自分…

例えば、if〜instanceofを避ける(2)

例えば、if〜instanceofを避ける(1) - 都元ダイスケ IT-PRESSの続き。解決策は幾つかある。とりあえず今回は1つ紹介。 public enum Processor { LIST(List.class) { @Override public void process() { // List用処理 } }, MAP(Map.class) { @Override publ…

例えば、if〜instanceofを避ける(1)

先日の地豆の開発チャットでの話題をまとめておく。Javaにおいて、気をつけて使わないとオブジェクト指向の世界を大きく壊してしまう可能性のある危険ワードはstaticとinstanceofだと思っている。staticについては、継承とコンポジットで少しだけ触れた通り…

DOMとSAXとStAXと。

こんな名前のAPIがありますね。主にXMLの読み込みを行う為のAPI群であります。SAX以外は、書き出しもできますね。そう、SAXは書き出しできないのですね、基本的に。 <foo> <bar>baz</bar> </foo> っていうもの凄い単純なXMLを、これらのAPIでどのように扱うのか。比較なエントリ。

Javaクイズ(Sorted編)

指定したComparatorに従って、addされた要素をソートした状態で保持してくれるSortedSet*1。以下のコードは、どのような結果になるでしょうか? 分からなかったので試してみた。 public class SortedSample { public static void main(String[] args) { Set<Model> </model>…

interfaceについて本気出して考えてみた

本気出す第二弾。オブジェクト指向を良く知らなかった頃*1、Javaの勉強を始めると、class, field, method, interface などのオブジェクト指向的な概念を覚えていくことになります。その中で、一番「よくわからんけど、まぁそんなものがあるのね。しっかし、…

動的なインターフェイスの追加(擬似的な方法)

public interface Foo { void foo(); } public class FooImpl implements Foo { public void foo() { // ... } } ある、Foo という仕様と同時に、Fooに対する実装を提供したとします。普通ですね。ここで「Fooはプラガブル*1にしたい。実装によって「動的に*…

動的な値のコンストラクタインジェクション・その後

private Model getSpecifiedIdModel(int id) { ComponentDef componentDef = container.getComponentDef(Model.class); ArgDef argDef = componentDef.getArgDef(0); Object valueBackup = argDef.getValue(); Expression expressionBackup = argDef.getExpr…

動的な値のコンストラクタインジェクション

S2Containerを使って、コンストラクタに動的な値を食わせることはできないだろうか、と考えている。例えば、0, 1, 2, 3...と、通し番号を生成するクラスがあって。 public class SerialNumberGenerator { public static int nextSequence() { return ...; } …

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

Throwable、Exception、RuntimeException(RTE)、Errorあたりを整理しながら、色々考えてみた。私見に基づくので、間違っているかもしれないけれど、自分としては頭が整理できたかな、と感じたので晒してみる。異論があったらコメントください。まず、一番基…

バグ発生時に投げるべき例外

「メソッドを呼ぶ前提条件が間違っている(ユーザによるミス)」時の例外は、IllegalStateExceptionですよね。そして「引数が間違ってる(ユーザミス)」時はIllegalArgumentException。しかし「バグが発生した(API提供側のミス)」時に投げるべき例外って…

Apache commonsが便利な件(commons-collections編-2)

http://d.hatena.ne.jp/daisuke-m/20080702/1214982943前回に引き続きcommons-collections。Java Collection Framework(JCF)では、大きく分けてCollectionとMapの2系統の概念が定義されています。そして、前回はこれらに加えて Bag, Buffer などの追加された…

Apache commonsが便利な件(commons-collections編-1)

http://d.hatena.ne.jp/daisuke-m/20080702/1214982943再びユーティリティ系。ということで今回はcommons-collections。commons-collections は、Javaコレクションフレームワーク(っていうと大仰だけど、要はListとかSetとかMap。以下JCF)まわりのユーティ…

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

http://d.hatena.ne.jp/daisuke-m/20080702/1214982943ユーティリティ系ばっかりじゃ飽きるかな。ということで今回はcommons-vfs。commons-vfs は、バーチャルファイルシステム。ファイルというのはあらゆる形で存在します。例えば、 ローカルのファイル 圧…

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

http://d.hatena.ne.jp/daisuke-m/20080702/1214982943今回はcommons-io。commons-io は、入出力まわりの便利クラスを提供してます。commons-langはjava.langの補強でしたが、こちらはjava.ioパッケージの補強、というスタンスです。 IOUtils closeQuietly …

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

http://d.hatena.ne.jp/daisuke-m/20080702/1214982943やー、前書いたエントリいつだったかな、と思って見たら7月ですよ。コツコツ書いていきますね。まず初回はcommons-lang。commons-lang は、java.langパケにあるような基本的なクラスを追加で提供してい…

Effective Java第二版

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

へんなSet

java.util.Set って、同じインスタンスを複数持たないよね。 Object o = new Object(); Set set = new HashSet(); set.add(o); set.add(o); set.add(o); set.add(new String()); assert set.size() == 2; 違うインスタンスであれば、全部はいる。 Set set = …

ジェネリクスを使いこなそうゼ

というネタでエントリ書けよゴルァ、とid:happy_ryoに脅されて書くエントリー。ジェネリクスご存知ですか。使ってますか。アノテーションと共にJava5から現れた、<> で囲まれた変な奴。全くの余談ですが、アノテとジェネリクスの事を理解していなかったその…

メソッドのアクセス制御

いやいや、忙しくてブログ更新サボっちまったぃ。まぁ、ぼちぼち書くつもりです。メソッドのアクセス(可視性)を制御するために、しばしばアクセス修飾子(private, publicなど)を使うのはご存知の通り。書いたコードの可視性を、全てpublicにしても、変更…

デフォルトスコープが上手く使えない

最近の悩みです。同一パッケージ内のみから可視であるデフォルトスコープ。パッケージ分けって2つのやり方があると思うんですよ。 ヒエラルキー的分類をパッケージ割りに反映させる。 同種のものを同じパッケージに置いておく 例えば、Actionクラスはこのパ…

仕様違反実装をしない様に

なーーんか、なんとなく思い出して引っ張ってきたエントリ。「Mapなんだけど、getした時に絶対nullが返ってきて欲しくないんだよねー。」という実装が欲しくなった時のお話。 Map<String, String> foo = new HashMap<String, String>() { @Override public String get(String key) { String r</string,></string,>…

Apache Commonsを総ざらってみる。

ということで、現状のコンポーネントをリストアップして、概要を日本語(一部英語のままw)でまとめてみました。今後、個人的に興味のあるものを順にピックアップして、もう少し深く知っておく、という作業をしてみようかな、と思ってます。まずは、commons…

Apache Commonsを総ざらってみたい。

JavaAPIって、普段からクラスパスにいるので、補完やら何やらでしばしば触れるし、コードもJavadocもすぐ手に届くところにある。JavaAPIよりももう少し高次元なAPIとして有名なApache Commonsシリーズですが、かなりの数のプロダクトがあり、一部の有名なコ…

DIとデザインパターン

id:j5ik2oさんの所で、パターンの話が盛り上がりを見せています。 今さらデザインパターン Decoratorパターン編 - じゅんいち☆かとうの技術日誌 今さらデザインパターン Visitorパターン編 - じゅんいち☆かとうの技術日誌 ところで、以前書いた「DIのお話を…

DIとSeasar2の話

を色々書きました。わかりやすいと反響を頂き、喜んでいますw ポリモーフィズムの例をもうちっと実用的に書いてみた。 - 都元ダイスケ IT-PRESS DIのお話を書いてみる。 - 都元ダイスケ IT-PRESS http://d.hatena.ne.jp/daisuke-m/20080511/1210485490 さら…