Left Context
Javaのtype inferenceというかcapture-ofを使ってany型の安全なメソッド呼び出しを考える。
private static <T> T inject() { throw new UnsupportedOperationException(); }
int型の変数に注入:
int a = inject(); ↓ int a = context.inject$("a", Integer.class);
int[]型でも何でもよい:
int[] hoge = inject(); ↓ int[] hoge = context.inject$("hoge", int[].class);
T型だとイレイジャ変換が必要か:
T foo = inject(); ↓ T foo = context.inject$("foo", (erasure converted T).class);
今までできなかったこれもできそうだ:(考察の余地はあるが)
Class<T> generic = inject(); ↓ Class<T> generic = context.generic$("T");
ローカル変数以外の場合:
System.out.println(inject());
この場合はイレイジャ変換をかけてしまうようなのでだめ。要はローカル変数にしか注入できないわけで。