では、以下がうまくいかないことは理解していますが、なぜうまくいかないのでしょうか?
interface Adapter<E> {}
class Adaptulator<I> {
<E, A extends I & Adapter<E>> void add(Class<E> extl, Class<A> intl) {
addAdapterFactory(new AdapterFactory<E, A>(extl, intl));
}
}
このadd()
メソッドは、「最初のバインドが型パラメーターである場合、追加のバインドされた Adapter<E> を指定できません」(Eclipse の場合)、または「型パラメーターの後に他の境界を続けることはできません」(IDEA の場合) というコンパイル エラーを返します。選択してください。 .
I
明らかに、 の前にtype パラメータを使用することは許可されていません。それだけです&
。(質問する前に言っておきますが、具体的なクラスではないという保証はないので、それらを切り替えても機能しませんI
。) しかし、なぜでしょうか? Angelika Langer の FAQ を調べましたが、答えが見つかりません。
一般に、ジェネリックスの制限が恣意的に見える場合、それは、型システムが実際に正確さを強制できない状況を作成したためです。しかし、私がここでやろうとしていることを壊すケースはわかりません。型消去後のメソッドディスパッチが関係しているのかもしれませんが、メソッドが1つしかadd()
ないので、あいまいさがあるわけではありません...
誰かが私のために問題を実証できますか?