Используемый класс (в Java, сторонний API, неизменяемый):
public class BookmarkablePageLink<T> extends Link<T> {
public <C extends Page> BookmarkablePageLink(final String id, final Class<C> pageClass)
И теперь я хочу вызвать его из Kotlin:
item.queue(BookmarkablePageLink("link", bookmark.page))
bookmark.page
- этов Java, и это: public Class<? extends WebPage> getPage()
Ни одна из этих работ:
item.queue(BookmarkablePageLink("link", bookmark.page))
Ошибка: недостаточно информации для вывода параметра T в constructor Bookmarkable PageLink<T : Any!, C : Page!>(...)
item.queue(BookmarkablePageLink<>("link", bookmark.page))
item.queue(BookmarkablePageLink<Any>("link", bookmark.page))
item.queue(BookmarkablePageLink<Any, *>("link", bookmark.page))
item.queue(BookmarkablePageLink<Any, WebPage>("link", bookmark.page))
item.queue(BookmarkablePageLink<Any, in WebPage>("link", bookmark.page))
item.queue(BookmarkablePageLink<Any, out WebPage>("link", bookmark.page))
item.queue(BookmarkablePageLink<Any, T : WebPage>("link", bookmark.page))
Это был бы "гипотетически правильный" способ сделать это на языке, говорящем на Java (просто намерение, но это не настоящий код), но это не такподдерживается Kotlin :
item.queue(BookmarkablePageLink<Any, ? extends WebPage>("link", bookmark.page))
Мой лучший обходной путь - это уродливо, но работает:
item.queue(BookmarkablePageLink<Any, WebPage>("link", bookmark.page as Class<WebPage>))
Удивительно, но на Java это было просто:
item.queue(new BookmarkablePageLink<>("link", bookmark.getPage() ));