Итак, я понимаю , что следующее не работает, но почему не работает?
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
там, перед &
, и это. (И прежде чем вы спросите, это не сработает, если вы переключите их, потому что нет гарантии, что I
не является конкретным классом.) Но почему нет? Я просмотрел FAQ Angelika Langer и не могу найти ответ.
Обычно, когда ограничение каких-то дженериков кажется произвольным, это связано с тем, что вы создали ситуацию, когда система типов не может фактически обеспечить правильность. Но я не вижу, какой случай сломает то, что я пытаюсь сделать здесь. Я бы сказал, может быть, что-то связано с отправкой метода после стирания стилей, но есть только один метод add()
, поэтому ему не нравится какая-то двусмысленность...
Может кто-нибудь продемонстрировать эту проблему для меня?