ChangeLog 最新ページ / カテゴリ最新ページ / 1 2 3 次ページ / page 1 (3)

java - ~matubara/ChangeLog移動しました

最終更新時間: 2009-02-01 00:57

2007-07-03 Tue

JScience [java][programming][net]

<http://jscience.org/>
単位変換と精度つき数、行列とベクトルのライブラリ

2007-03-12 Mon

2007-03-04 Sun

浮動小数点演算を非lazyにする strictfp [java]

class やメソッドの前に付ける修飾子のひとつで、
これによって修飾されたブロックでは、
すべての浮動小数点演算の途中結果の精度が、値の型に応じた精度に限定される。
ぎゃくにいうと、
非strictfpな式では、途中でオーバーフローするような計算でもただしく求まってしまうかもしれないというのが、仕様。

http://en.wikipedia.org/wiki/Strictfp

2007-02-09 Fri

バベル案内 [java][cxx][net]

<http://www.aoky.net/articles/steve_yegge/tour_de_babel.htm>

Javaに切り替えることは、2人のプログラマになることだ。
1人はあなたがもはや気にかけなくて良くなったことの面倒を見、もう1人が問題領域にフォーカスする。

2007-01-12 Fri

無名クラスのコンストラクタ代わりに instance initializer を使う [java]

import java.util.*;

public class A {
    public static void main(String[] args) {
Set<Integer> s = new HashSet<Integer>() {
    { // instance initializer. 
        System.out.println("constructed.");
        super.add(0);
    }
    @Override public boolean add(Integer x) {
        System.out.println("added " + x);
        return super.add(x);
    }
};
s.add(1);
s.add(11);
System.out.println(s);
    }
}

インスタンスフィールドの初期化をやりたいときに。
ただし、 super(...) は呼べない。

http://www.jguru.com/faq/view.jsp?EID=17355
コメント

Note that an instance initializer is only called once for a class.

は間違いっぽい。
すべてのコンストラクタの先頭にコピーされると思えばいい

2006-12-28 Thu

Java for C++ programmer [java][cxx]

関数ポインタはない。
→ interface 経由で”関数”を持つクラスのシングルトンインスタンスを渡す。

リンクはしなくていい。
ただし、ライブラリを使うプログラムを実行するときに、
ライブラリがある場所にパスを通す必要がある。
java -cp lib:. Main
→ 少なくとも、. は CLASSPATH に入れておくべき

ArrayList は add しないとサイズが増えない。
→ 自動的に fill されることがない

generics は template ではない。
Map<K,V> で、
K.equals の引数は Object です。
コンパイル時に型情報は消されます。
Map の契約は要素型に equals(Object) 、 hashCode(void) メソッドの妥当な実装を要求する。
→ annotation
@Override public boolean equals(Object o){ ... }

2006-12-28 Thu

Matrix Toolkits for Java ( MTJ ) [java][net]

<http://rs.cipr.uib.no/mtj/>

2006-12-05 Tue

2006-11-13 Mon

Latka - Latka (Version 1.0 Alpha 2) [java][net]

<http://jakarta.apache.org/commons/sandbox/latka/>
HTTP server 用の test suite

2006-11-13 Mon

JDocs.com - Your javadocs super-center [java][programming][net]

<http://www.jdocs.com/>
いくつかの異なる Java ライブラリの API がまとめて置かれている。
ある機能を提供するライブラリを探す、というときに便利かも。

org.apache.commons.math.complex とかがある。

2006-10-21 Sat

Java で木構造 [java]

富豪的プログラマは
javax.swing.tree.TreeNodeのインターフェイスで、実装は DefaultMutableTreeNode を使うらしい。

2006-09-23 Sat

Pair [java]

class Pair<F,S>
{
    public F first;
    public S second;
    Pair(F f, S s) { first = f; second = s; }
    public static<F,S> Pair<F,S> getInstance(F f, S s) { return new Pair<F,S>(f,s); }
    public String toString() { return "<" + first + ", " + second + ">"; }
}

2006-09-13 Wed

1要素の列挙型は、そのままシングルトン [java]

    enum Color {
RED(10);
int v;
Color(int i) { v = i; }
    }

列挙型タイプはインスタンス化できません。
Color c = new Color(11);
          ^
エラー1

2006-08-29 Tue

Log4J徹底解説〜目次 [java][cxx][net]

<http://www.nurs.or.jp/~sug/soft/log4j/index.htm>
log4j と annotation の連携は面白いかも。

2006-08-26 Sat

Scalable programming in scala [fp][java]

2006年1月の発表

2006-08-24 Thu

Java モニタリング [java]

JDK 5.0 の場合、

java -Dcom.sun.management.jmxremote

というオプションつきでプログラムを起動すると、

jconsole

からそのプログラムの使用メモリ量などの状態が見れる。

Java SE 6 Mustang じゃじゃ馬ならし Heap

2006-08-23 Wed

Javassist 3.1とjavaagentでmemorization [java][programming][net]

<http://d.hatena.ne.jp/bellbind/20050903/p2>
Java で eval な javassist と、
クラス・メソッド・フィールドの修飾子をユーザー定義できる annotation を利用して、
副作用のないメソッド(値の変換のための関数)なら
いつも使える修飾子 @memorize を提供する。

泥臭い実装と、きれいなインターフェイスが実にJavaらしい。

2006-08-18 Fri

リストのリストを型推論 [java]

List<List<String>> ll = new ArrayList<List<String>>();

というステートメントには、型が多すぎる。

    public class ListFactory
    {
public static<T> List<T> newInstance(T x, int ncopy)
{
    return new ArrayList<T>(Collections.nCopies(ncopy, x));
}
public static<T> List<T> newInstance()
{
    return new ArrayList<T>(Collections.<T>emptyList());
}

public static void main(String... args)
{
    List<List<String>> ll = ListFactory.newInstance(ListFactory.newInstance("a", 2), 3);
    //         ll.add(ListFactory.newInstance());
    List<String> l = ListFactory.newInstance();
    ll.add(l);
    System.out.println(ll);
}
    }

変数初期化のコンテキストが要求する型は完全な型だけれど、
メソッド引数のコンテキストが要求する型は実行時の型。
コメントアウトしたところの add は、
List<Object>
を要求していた。
なぜ?

いちおう考えてみた。

変数初期化ステートメントには完全な型情報(というか型パラメタ情報)があるのに対し、
メソッドシグネチャには実行時の型情報しかない。
クラスファイルしかないクラスのメソッドのシグネチャは、
クラスファイルに書かれている型情報しか持てないわけで、
そこにはコンパイル時にしか存在しない型パラメタの情報は含まれていない。

現状では、型を繰り返し書きたくない場合には、
適当な引数をつけて値のセットとかをすることにして、
そこから型推論してもらう、というのが無難か。

ほんとうは、バイトコードに型パラメタを書く
=マクロ展開式のジェネリクス
で、バイトコートレベルでコンテキストに完全な型パラメタの情報を
埋め込んだがいいような気がするけれど。

型パラメタ消去によるジェネリクスと、マクロ展開式のジェネリクスの得失は
よく分かっていない。
Java の場合は、互換性の問題もあり。

2006-08-18 Fri

ANSI C の main() 代替となる main メソッドのシグネチャ [java]

public static void main(String... args)

何がうれしいかというと、
main を別のメソッドから呼ぶとき、長さ0の引数

main();

で呼べるということ。

もともと書けていた

main(new String[]{});
main(new String[]{"a", "b"});

でも呼べるし、長さ1以上の引数リスト

main("a", "b");

でも呼べる。

2006-08-18 Fri

typedef を代替するトリック [java][net]

ジェネリックメソッドの型推論を使う。
<http://www-06.ibm.com/jp/developerworks/java/060310/j_j-jtp02216.shtml?ca=drs->

public static <K,V> Map<K,V> newHashMap() {
    return new HashMap<K,V>();
}

これを使えば、型パラメーターを2度入力することを安全に回避することができます。


Map<Socket, Future<String>> socketOwner = Util.newHashMap();

Powered by chalow
inserted by FC2 system