その他のJavaメモ

配列をリストに変換する
配列をリストに変換するには、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回別々の原因で出会ったことがあります。

  1. あるインターフェースAと、それを参照するクラスBを作り、それぞれコンパイルしました。
  2. Aをインターフェースから抽象クラスに変更し、Aだけをコンパイルしました。
  3. 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){
    // 例外が予想通りに発生した。
}

Java kowaza Top

(first uploaded 2004/05/03 last updated 2009/08/23, URANO398)

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル