如果我有
sealed class Foo<A> {
data class Bar<A>(val value: Int): Foo<A>()
}
并且我想Bar<Int>
使用运算符将构造函数称为隐式 lambda ::
,然后以下均不被接受为有效语法:
Foo<Int>::Bar<Int>
::Foo.Bar<Int>
::(Foo.Bar<Int>)
(编译器告诉我这个语法是为将来使用而保留的)。
如果我将嵌套类构造函数显式导入到作用域中,我可以引用它
import com.package.Foo.Bar
这使我可以::Bar
为构造函数和Bar<Int>::value
属性 getter 编写代码。但是我必须对每个嵌套的构造函数都这样做,这有点破坏了使用::
运算符来节省打字的优势。
有没有我遗漏的符号可以让我避免导入所有嵌套的类名和构造函数?
编辑
我最初的示例不涉及泛型,结果证明我在我正在处理的实际代码中遇到的问题过于简单化了,它确实使用了泛型。
事实证明,对于没有泛型参数的嵌套类,Foo::Bar
符号实际上是有效的,所以我最初的问题有一个错误的前提。但是,不可能在泛型类中创建对构造函数的可调用引用。这记录在以下错误报告中:https ://youtrack.jetbrains.com/issue/KT-15952