NUnitをみるその2(それより前にLog4netをみてみる1)

Log4netをまず見るほうがよさそうなので、こっちから。

で気づいた点。


.NETの可変長配列って、params指定なんすね。

        public static int Add(params int[] array)
        {
            int sum = 0;
            foreach (int i in array)
            {
                sum += i;
            }
            return sum;
        }


なんだかparamsって指定してるのに、配列指定もするあたりが冗長な感じ。


もうちょい驚いたのが、out指定かな。

out指定した変数は結果を戻すまでに何か指定されてないといけないみたい。

        public static void Bar(out string s)
        {
            s = "hoge";
        }

WebBeansのステレオタイプ


ってこういうことかな?

	@Retention(RetentionPolicy.RUNTIME)
	@Target( { ElementType.TYPE })
	public @interface Test1 {
	}

	@Retention(RetentionPolicy.RUNTIME)
	@Target( { ElementType.TYPE })
	public @interface Test2 {
	}


っていうアノテーションがあるとして、

それを親に持つ以下のようなアノテーションを準備する。

@Compositeで親にアノテーションの親も読むように指定しとくと。

	@Retention(RetentionPolicy.RUNTIME)
	@Target( { ElementType.TYPE })
	@Composite
	@Test1
	@Test2
	public @interface Test1And2 {
	}


アノテーションがつけられているクラスは以下みたいなかんじ。

	@Test1And2
	public class Hoge {
	}


これで意味的には@Test1と@Test2がつけられているのと

等価になるって感じなんかなあ?



ちょっと気にしなくちゃいけない点は

・同様のアノテーションが複数指定できない点(循環を何かしらの方法で防ぐ必要がある)

・上のようなマーカー的なアノテーションの使い方だとよいけど、

 値を渡すようなアノテーションを上位に持つと少し使いにくい点


があるかなあ。ちょうど個人的に2週間前くらいにいろいろ試していたので

そこそこタイムリーでした。WebBeansはどうするつもりなんだろうか。

WebBeansのステレオタイプ、ちょっと調べてみようかな。

でも仕様書ってもうあるんでしたっけ???


(追記)

あった。EADだけど。

みてみた。EADにはなんか記述が見つけられなかったので、

こっちみてみた。


アノテーションを親に指定していくだけでそれらも意味的に

含まれるような感じみたい。

	public
	@Secure
	@Transactional
	@RequestScoped
	@ComponentType
	@Retention(RUNTIME)
	@Target({TYPE, METHOD})
	@interface Action {}


なるほどー。でもまだ議論中だ、みたいなことが書かれていますね。