●配列をリストに変換する
配列をリストに変換するには、java.utils.Arrays#asList()を使います。
String[] files = {"a.txt", "b.txt", "c.txt"};
List fileList = Arrays.asList(files);
|
●ファイルのパス区切りを正規化する
ファイルのパスを文字列処理していて、UNIXのパス区切り("/")
と Windowsのパス区切り("\")が混ざってしまった場合、
これをプラットフォームのパス区切り文字に統一する簡単な方法です。
String s = "\usr\home/data/temp";
System.out.println(new File(s).getCanonicalPath());
|
●文字列をbooleanに変換するには?
Java APIを読んで慌てて使うと間違えやすいのですが、
「Boolean.getBoolean(String)」メソッドでは、文字列をbooleanには変換できません。
これは引数のシステムプロパティの値がtrueどうかを返すメソッドです。
上記目的のためには、「Boolean.valueOf(String).booleanValue()」とするのが正解です。
●String.compareTo()の返す値はどっちがどっちだっけ?
int result = str1.compareTo(str2);
|
は、「str1の方が大きければ正の値」=「str2の方が小さければ正の値」です。
同じ文字列なら0です。
●ロード済のあるクラスが、どこに置かれたJarファイルからロードされたのかを知るには?
MyCustomPredicate o = new MyCustomPredicate();
ClassLoader classLoader = o.getClass().getClassLoader();
URL classURL = classLoader.getResource("jp/co/my/custom/MyCustomPredicate.class");
System.out.println(classURL.toString());
classURL = classLoader.getResource("org/apache/commons/collections/Predicate.class");
System.out.println(classURL.toString());
|
ClassLoader#getResource()を使えば可能です。
このときクラスのパッケージ階層は、リソースとして指定するので、
.ではなくスラッシュ/で区切ることと、".class"もつける必要があることに要注意。
なお上のPredicateのように、インターフェースの.classファイルも調べることができます。
上記の結果は、
「jar:file:/C:/usr/java/lib/commons-collections-3.2.jar!/org/apache/commons/collections/Predicate.class」
のような形式で得られます。
●doubleを小数点以下指定桁で四捨五入するには?
"DecimalFormatで文字列にする"というのは無しで、本当にdoubleを四捨五入する方法です。
ちなみに、Math.round()は常に整数に丸めようとするので、今回の目的には使えません。
// vを小数点3桁で四捨五入し、小数点以下2桁のdoubleにする。
double v2 = new BigDecimal(v).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
●java.lang.IncompatibleClassChangeError?
この珍しいエラーには、2回別々の原因で出会ったことがあります。
- あるインターフェースAと、それを参照するクラスBを作り、それぞれコンパイルしました。
- Aをインターフェースから抽象クラスに変更し、Aだけをコンパイルしました。
-
Bをインスタンス化するか、またはObjectからキャストして初めてそのどれかのメソッドをコールしようとすると、
このエラーが出ました。
もう1つは、クラスローダが何種類かあるTomcatで、
クラスAがクラスBに、クラスBがインターフェースCに依存している状態で、
クラスローダ1がAとCをロードし、クラスローダ2がBをロードしてしまったような場合です。
●VMのメモリ使用状況を確認するには
次のようにして、JavaVMの空きメモリ容量、総メモリ容量、
使用可能な最大容量を取得できます。
(maxMemoryは定義されていない場合は取得できないこともあるらしい)
long free = Runtime.getRuntime().freeMemory();
long total = Runtime.getRuntime().totalMemory();
long max = Runtime.getRuntime().maxMemory();
|
●JUnitで、例外が想定通りに発生したかどうかを検証するには
JUnitについてはメモページがまだないのでここでtipsを。
これは逆に、fail()メソッドを使って、例外が発生「しなかったら」
テストが失敗するように書けばOKです。
try {
int result = targetObj.targetMethod("argumenttt");
fail();
} catch(IllegalFormatException ex){
// 例外が予想通りに発生した。
}
|
(first uploaded 2004/05/03 last updated 2009/08/23, URANO398)
|