Jersey2ソースコードリーディングの旅、第二弾。
前回は、型の旅をしてました。
TypeLiteral
ということでTypeLiteralに戻ってきたんだけど、Jersey2ソースコードリーディングといいつつ、こいつはHK2のソースですね。Jersey2はDIコンテナとしてHK2を使ってるからね。
hk2/TypeLiteral.java at hk2-parent-2.4.0-b34 · hk2-project/hk2 · GitHub
今日のGoal
これを理解できれば良い!
private final Type REQUEST_TYPE = (new TypeLiteral<Ref<HttpServletRequest>>() {}).getType();
削ぎ落とす
TypeLiteralの中で、知りたいメインの部分だけを残してみると、こうなった。
abstract class MyTypeLiteral<T> { Type getType() { ParameterizedType paramterizeType = (ParameterizedType) this.getClass().getGenericSuperclass(); return paramterizeType.getActualTypeArguments()[0]; } }
まとめ
型の情報を取得するためにこういう処理が必要ってことね。じゃ、次はWebComponent読もっと。
おまけ
TypeLiteralの中に、rawType常にnullというおもしろコードがあって癒やされた。rawTypeフィールドいらんやろ。
public final Class<T> getRawType() { if (rawType == null) { // Get the actual type Type t = getType(); return (Class<T>) getRawType(t); } return rawType; }