Если у меня есть
sealed class Foo<A> {
data class Bar<A>(val value: Int): Foo<A>()
}
и я хочу сослаться на конструктор Bar<Int>
как на неявную лямбду, используя оператор ::
, то ни один из следующих вариантов не будет принят в качестве допустимого синтаксиса:
Foo<Int>::Bar<Int>
::Foo.Bar<Int>
::(Foo.Bar<Int>)
(компилятор сообщает, что этот синтаксис зарезервирован для будущего использования).
I может ссылаться на него, если я явно импортирую вложенный конструктор класса в область видимости, используя
import com.package.Foo.Bar
, что позволяет мне написать ::Bar
для конструктора и Bar<Int>::value
для Собственник добытчик. Но я должен сделать это для каждого вложенного конструктора, и это отчасти сводит на нет преимущество использования оператора ::
для сохранения ввода.
Есть ли пропущенная запись, которая позволяет мне избежать необходимости импортировать все вложенные имена классов и конструкторы?
Edit
В моем исходном примере не использовались дженерики, что, как оказалось, было упрощением проблемы, с которой я столкнулся в моем реальном коде, над которым я работаю, который использует использует дженерики.
Оказывается, что для вложенных классов без параметров generi c нотация Foo::Bar
действительно работает, поэтому мой исходный вопрос имел неверную предпосылку. Однако невозможно создать вызываемые ссылки на конструкторы внутри обобщенных c классов. Это задокументировано в следующем отчете об ошибке: https://youtrack.jetbrains.com/issue/KT-15952