哪种方式更好,如果我希望用语法就像在科特林静态函数?(Which way is better if

2019-09-29 01:14发布

我知道有没有在科特林静态函数,所以我写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();
    }
}

Answer 1:

让我们反编译的字节码科特林看到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();
   }
}

第二种方式显然不是你的原意。 有不需要的实例创建。



Answer 2:

非也第二种方式。 第一种方法是精细如果该方法是一个特定的用例的对象。

然而,在你的榜样,你可能想调用方法时上下文可用。 然后,我会建议使用扩展代替。

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)
}


Answer 3:

其实任何一个是好的。 使用情况将主要取决于方法的知名度。 你必须在第二种情况下更多的知名度控制,因为它不是由包装的限制(如第一个)。 我相信会迫使你把在最高包hierarchie您.kt文件中以第一种情况下在代码中随处使用。



文章来源: Which way is better if I hope to use a syntax just like static function in Kotlin?
标签: kotlin