无法通过类型别名访问嵌套类型

Fel*_*bek 3 inner-classes kotlin

我在 Kotlin 中有一个数量/单位库,其中包含WeightDistance、等类Force。这些类继承自一个Quantity类,每个类都包含一个嵌套的枚举类Unit,其中包含有关每种数量类型的各自单位的信息。

作为一种物理上的奇怪现象,电动汽车的消耗(例如 kWh/100km)在技术上与力的量纲相同,因此该类Force.Unit包含NEWTONKILOWATTHOUR_PER_100_KILOMETERS

当然,我们用于FuelConsumption燃烧汽车和电动汽车的数量应该看起来相似,所以我创建了一个typealias ElectricConsumption = Force.

由于某种原因,我无法ElectricConsumption.Unit通过该类型别名访问内部类。这是极其不方便的。这是设计使然吗?为什么?有解决方法吗?

class A {
    enum class B { X }
}

typealias AA = A

fun main() {
   print(A.B.X)  // prints X
   print(AA.B.X) // Unresolved reference: B
}
Run Code Online (Sandbox Code Playgroud)

https://pl.kotl.in/wTuDs3Hgh

Kli*_*cou 5

鉴于Kotlin 语言规范规定“类型别名为指定类型引入了替代名称”,您可以合理地期望能够在可以使用原始类型名称的任何地方使用类型别名。您的示例中并非如此,我怀疑这是一个错误(KT-34281),因为它显然不符合 typealias 的官方描述。

您也许可以通过使用import as而不是类型别名来解决此问题:

import A as AA

class A {
    enum class B { X }
}

fun main() {
   print(A.B.X)
   print(AA.B.X)
}
Run Code Online (Sandbox Code Playgroud)

请在https://pl.kotl.in/1JUSVZtCL查看它的工作情况