我知道有没有在科特林静态函数,所以我写myClass1.kt和myClass2.kt两个代码
我不知道哪个好,你能告诉我吗? 谢谢!
主要
class HomeActivity : DemoActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Display1(this)
Utility.Display2(this)
}
}
myClass1.kt
import android.content.Context
import android.widget.Toast
fun Display1(mContext: Context){
Toast.makeText(mContext, "Hello, World 1", Toast.LENGTH_LONG).show();
}
myClass2.kt
import android.content.Context
import android.widget.Toast
object Utility {
fun Display2(mContext: Context) {
Toast.makeText(mContext, "Hello, World 2", Toast.LENGTH_LONG).show();
}
}
让我们反编译的字节码科特林看到Java代码。
myClass1.kt
public final class MyClass1Kt {
public static final void Display1(@NotNull Context mContext) {
Intrinsics.checkParameterIsNotNull(mContext, "mContext");
Toast.makeText(mContext, (CharSequence)"Hello, World 1", 1).show();
}
myClass2.kt
public final class Utility {
public static final Utility INSTANCE;
public final void Display2(@NotNull Context mContext) {
Intrinsics.checkParameterIsNotNull(mContext, "mContext");
Toast.makeText(mContext, (CharSequence)"Hello, World 2", 1).show();
}
private Utility() {
INSTANCE = (Utility)this;
}
static {
new Utility();
}
}
第二种方式显然不是你的原意。 有不需要的实例创建。
非也第二种方式。 第一种方法是精细如果该方法是一个特定的用例的对象。
然而,在你的榜样,你可能想调用方法时上下文可用。 然后,我会建议使用扩展代替。
fun Context.display1(){
// In the function, `this` is refer to the context
Toast.makeText(mContext, "Hello, World 1", Toast.LENGTH_LONG).show();
}
然后,在Activity
中,您可以编写
fun example() {
display1()
}
代替
fun example() {
Display1(this)
}
其实任何一个是好的。 使用情况将主要取决于方法的知名度。 你必须在第二种情况下更多的知名度控制,因为它不是由包装的限制(如第一个)。 我相信会迫使你把在最高包hierarchie您.kt文件中以第一种情况下在代码中随处使用。
文章来源: Which way is better if I hope to use a syntax just like static function in Kotlin?