我认为typealiases与原始类型相同,只是一个不同的名称。
我认为typealiases与原始类型具有相同的引用。
typealias Celsius = Double
fun Double.Companion.foo() {} // Works
fun Celsius.Companion.foo() {} // Does not work
此处,Companion
可以从Double
访问,但Celsius
会提供未解决的参考错误。
答案 0 :(得分:2)
不,您无法通过typealias访问随播广告对象。一种可能的解决方法是为具体的伴侣创建一个更多的类型:
typealias CelsiusCompanion = Double.Companion
之后您可以按如下方式使用它:
fun CelsiusCompanion.foo() {}
答案 1 :(得分:1)
如果你想定义一个扩展函数,那就不可能像hluhovskyi已经说过的那样,但如果你只是想调用companion object
的函数,情况会有所不同。
在companion object
中访问函数和属性有两种方法。您可以明确地或隐含地指定访问权限。隐式方法适用于typealias
,显式方法不适用。
考虑这个最小的例子:
class ClassWithCompanion{
companion object {
fun sayHello() {
println("Hello")
}
}
}
typealias Alias = ClassWithCompanion
fun main(args: Array<String>) {
ClassWithCompanion.sayHello() // implicit
ClassWithCompanion.Companion.sayHello() // explicit
Alias.sayHello() // implicit (works)
Alias.Companion.test() // explicit (does not work)
}