如何扩展Kotlin Number类或使用泛型来创建一个简单的属性getter,它将对所有Number子类进行操作?

如何扩展Kotlin Number类或使用泛型来创建一个简单的属性getter,它将对所有Number子类进行操作?,kotlin,kotlin-extension,Kotlin,Kotlin Extension,我试图通过构建扩展内置类的非常简单的方法和属性获取程序来了解更多关于Kotlin抽象类扩展和泛型的信息。我基本上是成功的,但我被数字课难倒了。我的测试属性Number.sgn旨在返回Number的任何子类的符号(1或-1作为Int)。为简单起见,负数应返回-1,而正数和0应返回1。我对这个方法的用例不是特别感兴趣,而是为了理解如何编写这样简单的东西——以及为什么我的代码会产生这样的错误。我的模块中唯一的导入是kotlin.text.*,并且我收到的错误消息确实指向那里的冲突。我只是不明白为什么会

我试图通过构建扩展内置类的非常简单的方法和属性获取程序来了解更多关于Kotlin抽象类扩展和泛型的信息。我基本上是成功的,但我被数字课难倒了。我的测试属性
Number.sgn
旨在返回Number的任何子类的符号(1或-1作为Int)。为简单起见,负数应返回-1,而正数和0应返回1。我对这个方法的用例不是特别感兴趣,而是为了理解如何编写这样简单的东西——以及为什么我的代码会产生这样的错误。我的模块中唯一的导入是
kotlin.text.*
,并且我收到的错误消息确实指向那里的冲突。我只是不明白为什么会发生冲突以及如何克服它——尽管我猜这是一个新手的错误

我首先编写了扩展Int类的代码,该类运行良好:


inline val Int.sgn get()=if(这是您的第一个函数,因为它实现了
Comparable
,这就是
感谢您的快速/彻底的回答。
一旦您让我开始使用compareTo,我就试图研究如何让Kotlin只调用相关特定数字类的compareTo,而不是寻找compareTo的实现。)在Number中,我调整了一些东西,直到我最终得到:
inline val T.sgn其中T:Number,T:Comparable get()=if(这个<0作为T))-1 else 1
它可以工作,但我仍然不确定我是否可以在不具体化T的情况下使用泛型和/或具体化是否会对性能产生实质性影响的情况下达到目的。再次感谢!
inline val <T : Number> T.sgn 
    get() = if (this.toDouble() < 0) -1 else 1
operator fun Number.compareTo(other: Number) = this.toDouble().compareTo(other.toDouble())