我知道Kotlin中没有静态函数,所以我在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();
}
}
答案 0 :(得分:3)
绝对不是第二种方式。如果方法是对象的特定用例,则第一种方法很好。
但是,在您的示例中,您可能希望在上下文可用时调用该方法。然后,我建议使用扩展名。
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)
}
答案 1 :(得分:2)
让我们反编译kotlin字节码并查看java代码。
<强> myClass1.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();
}
}
<强> myClass2.kt 强>
urllib3
第二种方式显然不是你想要的。有一个不需要的实例创建。
答案 2 :(得分:0)
实际上,任何一个都是好的。用例主要取决于方法的可见性。在第二种情况下,您有更多的可见性控制,因为它不受包的限制(如第一种情况)。我相信第一种情况会强迫您将.kt文件放在最高的包中,以便在代码中的任何地方使用。