在android(Kotlin)中添加登录扩展
我使用此代码为在android(Kotlin)中添加登录扩展,android,kotlin,kotlin-extension,Android,Kotlin,Kotlin Extension,我使用此代码为Log类android添加扩展 fun Log.i2(msg:String):Unit{ Log.i("Test",msg) } 在活动中使用时 class MainActivity: AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(
Log
类android添加扩展
fun Log.i2(msg:String):Unit{
Log.i("Test",msg)
}
在活动中使用时
class MainActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.i2("activity_main")
}
}
找不到Log.i2。怎么了?要在静态类中实现扩展功能,需要编写伴生对象的扩展(请参阅)
您已经创建了类
Log
的扩展函数。
假设它通过类
Log
的实例调用。您试图将扩展函数视为静态函数,并按类名调用它。在这种情况下这是不正确的目前,Kotlin中的静态扩展方法在没有伴生对象的情况下是不受支持的,因为android.util.Log
是一个java类,所以没有伴生对象
相反,我建议您使用静态函数(包级函数,仅在源代码文件中的类外部声明):
就像这样使用它:
logI2("activity_main")
您的扩展类扩展名是什么(类型:like.kt)?类型文件Log.ktI需要在android中的android.util.Log类上添加函数。不是新的自定义类android.util.Log类是静态的,为了在Kotlin中实现静态类的扩展功能,我们需要使用它们的伴生对象引用。如果在日志中不可能,那么我建议根据此扩展创建Any
扩展函数。如果您不使用receiver对象,那么Any
是多余的,此时您可以创建静态logI2
函数。@Pawel为什么要使用顶级函数?为什么不用呢?因为这两个有着相同的行为。
fun logI2(msg: String) {
Log.i("Test", msg)
}
logI2("activity_main")