S2Container.getComponent時のキャストを無くす

しばらく触ってないとすっかり忘れますね(^_^;

Test test = (Test) container.getComponent(Test.class);

キャストっているんだっけ?と思って過去の成果物を見てみると、みんなAutoRegisterでコンポーネント登録してたからgetComponentなんて書いてない。たまにこういう根本的な部分のコードを書くと書き方忘れてますね。いつもフレームワーク頼みの部分です。実際はこう書きたい。

Test test = container.getComponent(Test.class);

getComponentの戻り値がObjectになってるのでキャストは必須だと思われる。この件とは別にこういう処理でキャストを不要にするにはどういう作りをすればいいのか?というのが一瞬思い浮かばず実験してみたら書けた。

public static  T getComponent(Class clazz) {
    S2Container container = SingletonS2ContainerFactory.getContainer();
    T component = clazz.cast(container.getComponent(clazz));
    return component;
}

※実際に上記コードと同じ事をしたければ
Test test = SingletonS2Container.getComponent(Test.class);
でキャスト不要です。上記は実験用の冗長なコードです。

このメソッドを経由するとキャストが要らなくなった。こういうもんか?と思いつつこのメソッドは使用しないでAutoRegisterにまかせる事にした(笑)

private @Binding Test test;

こうすりゃいいのでこっちの方が楽だった。publicにすればアノテーションもいらぬという。