class Uber {
inner class FooNamespace {
fun insert(): Unit {}
fun open(): Unit {}
fun dispose(): Unit {}
}
val foo = FooNamespace()
inner class BarNamespace {
fun insert(): Unit {}
fun terminate(): Unit {}
fun hop(): Unit {}
}
val bar = BarNamespace()
}
该类的用户可以做这样的事情:
val uber = Uber()
uber.foo.insert()
uber.bar.hop()
我想要的是将 inner class ... and val xxx = XxxNamespace() 成一个表达式。例如:
// This doesn't actually compile
val foo = object: inner class {
fun insert(): Unit {}
fun open(): Unit {}
fun dispose(): Unit {}
}
对于私有属性,语法 val foo = object { ... } 是足够的,但对于公开暴露的属性,这些会被推断为 Any 并且使它们无法使用。
一个选择显然是为这些类型定义一个接口,但它比你已经想出的还要样板化,所以我很确定这不适合你的需要:
interface FooNamespace {
fun insert()
fun open()
fun dispose()
}
class Uber {
val foo = object : FooNamespace {
override fun insert(): Unit {}
override fun open(): Unit {}
override fun dispose(): Unit {}
}
}
我知道你认为这些函数应该放在不同的类中,问题解决了。但出于其他原因,将所有函数放在一个类中更方便
我确实是这样想的,并且很想听到更多关于为什么把所有东西都放在同一个类中会如此方便的信息:)因为这些类是 inner classes ,所以我假设这与从访问私有状态有关 Uber ,但这也可以通过将这个私有状态包装到传递给 foo 和 bar 的另一个类中来完成。