Используемый класс (в Java, сторонний API, не изменяемый):
public class BookmarkablePageLink<T> extends Link<T> {
public <C extends Page> BookmarkablePageLink(final String id, final Class<C> pageClass)
И теперь я хочу назвать это от Котлина:
item.queue(BookmarkablePageLink("link", bookmark.page))
bookmark.page
находится в Java, и это: public Class<? extends WebPage> getPage()
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))
Это был бы "гипотетически правильный" способ сделать это в Javaish-talk (просто намерение, но это не настоящий код), но это не поддерживается 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() ));