倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

Java

「GoF デザインパターン」アノテーション (1) : AbstractFactory パターン

今回から、GoF 本に載っているデザインパターンについて、役割をマークするアノテーションを定義していってみましょう(一覧)。今回は AbstractFactory パターン。 Wikipedia (日本語) Wikipedia (English) LePUS3 and Class-Z AbstractFactory パターン…

「GoF デザインパターン」アノテーション (5) : Singleton パターン

今回は Sigleton パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) Singleton パターンの登場人物 @Singleton → 型 @Instance → フィールド @GetInstance → メソッド アノテーション定義 上記の定義の具体的な Java コード。 package org.waman…

「GoF デザインパターン」アノテーション (4) : Prototype パターン

今回は Prototype パターン(一覧)。 Wikipedia (English) Prototype パターンの登場人物 @Prototype → 型 @CreateClone → メソッド @ConcretePrototype → 具象クラス prototypeType : Class @Client → 型 prototypeType : Class アノテーション定義 上記の…

「GoF デザインパターン」アノテーション (3) : Factory Method パターン

今回は Factory Method パターン(一覧)。 Wikipedia (日本語) Wikipedia (English) LePUS3 and Class-Z Factory Method パターンの登場人物 @Framework → パッケージ @Creator → 型 productType : Class @FactoryMethod → メソッド @PrimitiveMethod → …

アノテーションでデザインパターンの役割をマークする (8):「Iterator パターンの役割マーク」改善の試み 其ノ参

今回の改善は、型に付加するアノテーションにパラメータを定義して、協調する役割(型)や関係のある役割(型)を指定できるようにすることです。例えば Iterator パターンにおいて、Aggregate は Iterator を生成しますが、Iterator の役割をするインターフ…

アノテーションでデザインパターンの役割をマークする (6):「Iterator パターンの役割マーク」改善の試み 其ノ壱

今回は、前回行った「『Java 言語で学ぶデザインパターン入門(結城浩)を参考にしてみる』」の続き。 少々、改善を試みます。改善点 今回改善を試みる箇所は、「Iterator と ConcreteIterator、Aggregate と ConcreteAggregate の間でメソッドに付加するア…

アノテーションでデザインパターンの役割をマークする (7):「Iterator パターンの役割マーク」改善の試み 其ノ弐

今回は、前回の問題点の解決法をチョットだけ違った形で。改善点 前回の解決方法「ConcreteXxxx アノテーションに定義されている子アノテーションを除去する」に加えて、@ConcreteIterator, @ConcreteAggregate アノテーションに代えて @Iterator.Concrete, …

アノテーションでデザインパターンの役割をマークする (5):『Java 言語で学ぶデザインパターン入門』(結城浩)を参考にしてみる

以前に『アノテーションでデザインパターンの役割をマークする』ってな記事を書きました。 そこでは、定型のデザインパターンで役割を担っているクラスなどにアノテーションでマーク付けをしようという試みでした。ところで、デザインパターンと言えばやはり…

Java と XML と空白と (6):テキストノードの正規化(JDOM 編)

前回、「テキストの正規化」として Nux JavaDoc API に定義されている空白の扱いを見ました。で、ふと JDOM の JavaDoc を見ると、似たような「テキストの正規化」が定義されていました・・・ しかも、こちらの方がなじみやすそうな命名で(^ ^;) ってことで…

「static import」か? 「import static」か?

Java SE 5 から導入された「static import」機能。 実際にコード中に書くときに static import javax.xml... なのか import static javax.xml... なのか分からないって方はいませんか?そういうあなたに「import 文は import で始まる」という言葉を贈ります…

アノテーションでデザインパターンの役割をマークする (4):クラス・ベース

最後は「クラス・ベースの実現」。 ほどんど「インターフェース・ベースの実現」と同じですが、インターフェースの代わりに(ユーティリティー)クラスを用いているところが違います。 『Effective Java 第2版 (The Java Series)』で「定数インターフェース…

アノテーションでデザインパターンの役割をマークする (3):インターフェース・ベース

今回は「インターフェース・ベースの実現」。 この方法は定数インターフェースパターンと同じようなところがあるので、あまり良くないかと。アノテーションの実装 「インターフェース・ベースの実現」では、デザインパターン名と同じ名前のインターフェース…

アノテーションでデザインパターンの役割をマークする (2):enum ベース

今回は「enum ベースの実現」。 これは役割を指定するための列挙型を別途作成して、アノテーションの引数として使用する方法です。 この enum ベースの方法は、他の3つとチョット感じが違います。アノテーションの実装 「enum ベースの実現」では、 デザイン…

アノテーションでデザインパターンの役割をマークする (1):パッケージ・ベース

今回は「アノテーションでデザインパターンの役割をマークする」ための一番素直な実現、「パッケージ・ベースの実現」。 これは、1つのデザインパターンをマーキングするのに必要なアノテーションを1つのパッケージにまとめます(うーむ、当たり前?) 当然…

アノテーションでデザインパターンの役割をマークする (0):準備

デザインパターンやフレームワーク、イディオムなどを使用する際、どのクラスやメソッドがどの役割を果たしているのかってのを分かりやすくするためにアノテーションを使ってはどうか?と思い、チョット試してみました。「アノテーションを読み込んで処理を…

Java と XML と空白と (5):XML の空白と Java

今回は、XML の空白を Java で扱う方法を幾つか。 正規表現 属性値の正規化 テキストの正規化 正規表現 XML での空白は ' ', '\t', '\r', '\n' の4文字なので、Java での正規表現(java.util.regex.Pattern の JavaDoc 参照)で XML の空白文字 (whitespace …

Java と XML と空白と (4) : HTML, XML, XHTML の空白

今回は、幾つかのマークアップ言語について、空白の扱いを見ていきます。 ここで見ていくのは次の3つ: HTML 4.01 XML 1.0 XHTML 1.0 正確にはそれぞれの仕様書を参照してください。HTML 4.01 仕様書は『HTML 4.01 Specification』。 以下では次の項目を見て…

Java と XML と空白と (3) : String#trim() メソッド

前回、Java での「whitespace」のややこしい扱いを見ましたが、哀しいかな、他にも「whitespace」のややこしい扱いがあります。 それは String#trim() です。String#trim() の JavaDoc をみると、 Returns a copy of the string, with leading and trailing …

Java と XML と空白と (2) : 正規表現

前回、java.lang.Character クラスの static メソッドを用いて、Java での空白文字を見ました。 このとき Character#isSpaceChar() Character#isWhitespace() という2つのメソッドを使って空白文字かどうかを判定していました。哀しいかな Java には他の空白…

Java と XML と空白と (1) : Java と XML の空白文字

Java での空白文字 Java で空白とみなされる文字は?と聞かれると、意外とよく分からない。 Character クラスの static メソッドに isSpaceChar() と isWhitespace() とが定義されているけど、JavaDoc を読んでも全然分からない。ということで、実際に Chara…

org.w3c.dom.Document を java.io.Reader に変換する

以前の記事で org.w3c.dom.Document オブジェクトを java.io.Writer へ書き出す処理を見ました。今回はそれを踏まえて、「org.w3c.dom.Document オブジェクトを java.io.Reader オブジェクトとして扱う」方法を考えます。 この目的のために java.io.Reader …

Effective Java 第2版

Joshua Bloch 著『Effective Java 第2版 (The Java Series)』読了。Java SE 5 から導入された Generics, Enum, Annotation, concurrency をはじめ、for-each ループ, Auto Boxing/Unboxing などを使用する際の注意点などにも言及されてます。 ただし、内容は…

org.w3c.dom.Document を出力する

org.w3c.dom.Document オブジェクトを標準出力やファイルに出力するのに困ったことはありませんか? javax.xml.transform パッケージ内のクラスを使うと、ある程度簡単に Document オブジェクトを外部へ書き出すことが出来ます。java.io.Writer へ書き出す p…

QName を使った SAX イベント・ハンドラ (3) : 実装クラス

今回は、前回作成したの2つのインターフェースの実装クラス JDefaultHandler, JAttributesImpl クラスを作成します。JDefaultHandler クラス JDefaultHandler は org.xml.sax.helpers.DefaultHandler を拡張して作成します。 各メソッドの実装の概要は以下の…

QName を使った SAX イベント・ハンドラ (2) : インターフェース

今回は、前回示したクラス群の中の2つのインターフェース JContentHandler, JAttributes を作成します。JContentHandler インターフェース JContentHandler は org.xml.sax.ContentHandler を拡張して作成します。 また、JContentHandler には、javax.xml.na…

QName を使った SAX イベント・ハンドラ (1) : 概要

org.xml.sax.ContentHandler で要素に対する SAX イベントを扱うとき(つまり startElement() や endElement() を実装するとき)、引数に3つも文字列が定義されているので少々扱いにくくなっています。 また、属性を表すインターフェース org.xml.sax.Attrib…

システム・プロパティ

サンマイクロシステムズ (Sun Microsystems) の JDK に付属している JRE (バージョン 1.6.0_01)のシステム・プロパティ。 System.getProperties() によって取得。 OS は Windows XP SP2。 プロパティ名 プロパティ値 awt.toolkit sun.awt.windows.WToolkit…

リソースの読み込み

Java プログラムからリソース(ファイル)を読み込む方法を幾つか紹介。 以下で見る方法は、どれも java.io.InputStream を取得する方法ですが、どのフォルダを基点にするかが違います。 ここで見るのは次の3つです: ベース・フォルダ上のファイル ソースフ…

RELAX NG で妥当性検証 by Jing

今回は Jing を使って、RELAX NG による XML 文書の妥当性検証を行う方法を見ていきます。 Jing の JAR ファイル等はこちらからダウンロードできます。 また、Maven2 で依存性に付加したい場合は、次のような <dependency> 要素を設定してください: <dependency> <groupId>thaiopensource</groupId> <artifactId>jing</artifactId></dependency></dependency>…

ムリヤリ拡張 for 文を使う

Java 5 以降で Generics に対応していないライブラリを使用する際に、拡張 for 文を(無理矢理)使用する方法をご紹介。 堅牢性に重きを置くプロジェクトでは使わない方がよいかと思いますが。以下のサンプルでは、Element は「org.dom4j.Element」で、XML …