[Java] Javaの子ネタ

最近、開発をまた行うようになってJavaの子ネタをいくつか発見したので、紹介したい。

1. キャストが不要なファクトリのシグネチャ
以下のようにやるとファクトリを使ってもキャストしなくて
すみます。たとえば、Seasar2シグネチャは、キャストが必要なのでラップして使ったりしています。

(Factroy利用クラス)
…
  A aaa = Factory.get(A.class) ;//キャスト不要>
…

(Factory内のロジック)
…
static public <T>T get(Class<T> classtype) {
	return (T) doGet(classtype);		
}
…

2.特定クラスの呼び出しパッケージを制限する方法
フレームワークとかで呼び出し側のパッケージを制限したい時って良くあります。
呼び出しクラスの解析って、Exceptionを投げたときのスタックトレースを使えば可能になります。
無論負荷が大きいので、開発時のみ確認するアサーションにするわけです。

…
CallerAnalyzer.AssertAccessedFrom("rdx.presentationModel.*",
		"rdx.framework.*");//引数以外のパッケージからのアクセスがあるとエラー
…
(CallerAnalyzerクラス内)
…
try {
	throw new Exception();
} catch (Exception e) {
	return e.getStackTrace()[2];
}

…