したがって、依存性注入の初期化の一部である、このような一般的なメソッドがあります。
public static <TS, TI extends TS> void registerTransient(
Class<TS> serviceClass, Class<TI> implementationClass)
{
//
}
ある時点で、クラスが必ずしも存在しない場合があることがわかりました。そして、これは複数のオフを注入する実装クラスです(したがって、サービスクラスは実装クラスと同じです)。当然、次のように記述します。
Class<?> clazz = Class.forName("com.acme.components.MyPersonalImplementation");
registerTransient(clazz, clazz);
IDEAにはこれに関する問題はありませんが、javacは次のように文句を言います。
error: method registerTransient in class TestTrash cannot be applied to given types;
required: Class<TS>,Class<TI>
found: Class<CAP#1>,Class<CAP#2>
reason: inferred type does not conform to declared bound(s)
inferred: CAP#2
bound(s): CAP#1
where TS,TI are type-variables:
TS extends Object declared in method <TS,TI>registerTransient(Class<TS>,Class<TI>)
TI extends TS declared in method <TS,TI>registerTransient(Class<TS>,Class<TI>)
where CAP#1,CAP#2 are fresh type-variables:
CAP#1 extends Object from capture of ?
CAP#2 extends Object from capture of ?
何が得られますか?このメソッドでは、2番目のパラメーターが最初のパラメーターのサブクラスである必要があります。?
たまたまどのクラスであるかに関係なく、それは両方のパラメーターで同じクラスオブジェクトであり、クラスは常にそれ自体から割り当て可能であると私は思いました。これは、javacが2番目のパラメータに使用する2番目のワイルドカードタイプを不必要に発明し、「ああ、ここには2つのワイルドカードがあるので、一方が他方から割り当て可能かどうかわかりません」と言っているようです。