忍者ブログ
[11] [12] [13] [14] [15] [16] [17] [18] [19]

DATE : 2024/04/26 (Fri)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


DATE : 2006/04/30 (Sun)

前回の記事

日本語を書く

前回の記事では、プロパティの書き方をメモしました。

しかし、プロパティファイルにはひらがなやカタカナ、漢字などの文字を直接書くことはできません。プロパティファイルの文字エンコーディングは ISO 8859-1 なので、Shift_JIS や EUC-JP などの文字コードを含められないのです。

Shift_JIS や EUC-JP などでしか表現できない文字を含めるには、Unicode に変換する必要があります。しかし、ISO 8859-1 と Unicode は違う文字エンコーディングなので、Unicode もプロパティファイルには書けません。

しかし、 Java には Unicode のコード番号を直接記述する方法があります。具体的には、「\uxxxx」(xは整数)という形です。この方法を使うと、プロパティファイルに日本語を書くことができます。

例えば、「aiueo = あいうえお」というプロパティをプロパティファイルに記述する場合は、以下のようになります。

aiueo = \u3042\u3044\u3046\u3048\u304a

「あ」が Unicode の3042なので「\u3042」、「い」が3044なので「\u3044」……となります。

この作業を自力で行うのは大変です。しかし、JDK には native2ascii というツールが付属しています。このツールを使えば、上記のような変換も簡単にできます。

なお、 Eclipse を使用している場合は、プロパティファイルを編集するプラグインを導入すると、プロパティファイルに直接日本語を書いているように編集できます(日本語 と ISO 8859-1 間の変換は、プラグインが行ってくれます)。

つづきます

PR

DATE : 2006/04/27 (Thu)

プロパティファイルを使うと、設定をソースコードから分離できます。分離することで、設定を変えても再ビルドする必要がなくなります。

また、国際化機構にもプロパティファイルが使われています。各ロケールに対応するメッセージをプロパティファイルに記述しておくことで、ロケールに合った言語のメッセージが読み込まれます。

プロパティファイルの記述方法は簡単ですが、そのぶん忘れやすいのでここにメモしておきます。(;^ω^)実際に忘れました……

プロパティを記述する

1つのプロパティは、1行で記述します。プロパティは、以下の形で書きます。

<キー> = <要素>

<~>の部分は、該当する文字列に置き換えます。

要素は、java.lang.String に変換されます。

複数行で1つのプロパティを記述することもできます。その場合は、改行の直前に「\」を置きます。

例えば、キーが「akey」で要素が「abcdefg」とすると、1行でプロパティを記述する場合は以下のようになります。

akey = abcdefg

複数行で記述する場合は次の通りです。

akey = abcd\
        efg

一見、要素が「abcd        efg」となりそうですが、「\」で改行した後の一連の空白(半角スペースやタブ)は全て無視されます。つまり、上のように記述しても値は「abcdefg」のままです。

ちなみに、「=」の代わりに「:」を使うこともできます。

なお、キーに「=」や「:」の文字を含める場合は、「\=」や「\:」というように、「\」でエスケープします。要素ではエスケープする必要はありません(エスケープしても問題ありません)。

ちなみに、要素が無い場合は、以下のように記述します。

akey =

もしくは、次のような書き方もできます。

akey

これらの場合、要素は空の文字列となります。

なお、キーの前後や要素の前後にある空白は全て無視されます。そのため、インデントをつけて整形しても問題ありません。

つづきます


DATE : 2006/04/21 (Fri)

Java では、プリミティブ型として byte, short, int, long, float, double, char, boolean が用意されています。

そして、byte は1バイト幅、short は2バイト幅、int は4バイト幅――と、プリミティブ型のバイト幅は決まっています。

しかし、『Java 仮想マシン入門 Returns(2) バイトコード編1』の『データ型』の項によると、byte, short, boolean は実行時には int 型として扱われるそうです。また、int 型用の命令で処理されることが多いようです。

実際に『Java 仮想マシン仕様』(英語)を覗いてみると、『3.11.1 Types and the Java Virtual Machine』にそれらしき記述が見つかりました。

また、『型変換』の項によると、int 型で扱われている byte などの型は、値の範囲を合わせるために int → byte などへの型変換が行われるものの、再び int 型として扱われるそうです。

ここから、int 型に代わって byte 型や short 型を使ってメモリ消費を抑えようとしても、ほとんど無意味なことが分かります。むしろ、int 型から byte 型などへの変換が内部で行われる(そして再び int 型として扱われる)ため、無駄な処理を行っていることになります。

なお、『Java 仮想マシン入門 Returns(5) バイトコード編4』の『newarray』の項によると、配列に限っては、実行時に確保される配列が実装によって変わるそうです。例えば、boolean 型の配列は、ある仮想マシンでは int 配列として、別の仮想マシンでは byte 配列として確保するようです。

再び『Java 仮想マシン仕様』の『3.3.4 The boolean Type』を覗いてみると、 JDK 1.0, 1.1、Java 2 SDK 1.2 では boolean 型の配列は byte 配列として確保していたようです。この仕様書は Java 2 登場当時のものですから、今の JDK も byte 配列で確保しているのかもしれません。

参考文献


DATE : 2006/04/20 (Thu)

Java SE 5 から、総称型(Generics)が導入されました。

総称型を使うことで、 java.util.List などの要素の型をコンパイル時に保証できるようになりました。

しかし、 Java SE 5 からということは、それ以前の Java では総称型が使えなかったわけです。

そのため、Java SE 5 以前から存在するライブラリや、それ以前でもサポートするライブラリでは、総称型が使用されていません。

これは少々困ったことになります。Java SE 5 を使っている身としては、総称型を使ったコードと使っていないコードとはあまり混ぜたくありません。

しかし、簡単な方法で総称型に変換することができます。――というよりも、強引に総称型として扱うことができます。

具体的には、以下の通りです。ここで、 createList メソッドは、総称型を使用していない java.util.List を返すメソッドです。中身は、java.lang.String とします。

List<String> list = createList();

正直、身も蓋もありません orz

ただし、このままではコンパイラが『無検査変換です』と警告を出してきます。

そこで、次の注釈を付け加えます。

@SuppressWarnings("unchecked")
List<String> list = createList();

この注釈をつけると、無検査変換に関する警告が出なくなります。

ちなみに、このようなこともできます。

for (String s : (List<String>) createList()) {
    // 処理
}

この場合は、この処理を実行するメソッドに上の注釈を付けます。

参考文献

忍者ブログ [PR]
ブログ内検索
最近の状況
リンク
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
ブログ内検索
最近の状況
リンク
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック