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());

この場合はイレイジャ変換をかけてしまうようなのでだめ。要はローカル変数にしか注入できないわけで。