如果我希望使用类似Kotlin中静态函数的语法,那么哪种方法更好?
我知道Kotlin中没有静态函数,所以我在myClass1.kt和myClass2.kt中编写了两个代码 我不知道哪个更好,你能告诉我吗?谢谢 Main如果我希望使用类似Kotlin中静态函数的语法,那么哪种方法更好?,kotlin,Kotlin,我知道Kotlin中没有静态函数,所以我在myClass1.kt和myClass2.kt中编写了两个代码 我不知道哪个更好,你能告诉我吗?谢谢 Main class HomeActivity : DemoActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout
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();
}
import android.content.Context
import android.widget.Toast
object Utility {
fun Display2(mContext: Context) {
Toast.makeText(mContext, "Hello, World 2", Toast.LENGTH_LONG).show();
}
}
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();
}
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
import android.content.Context
import android.widget.Toast
fun Display1(mContext: Context){
Toast.makeText(mContext, "Hello, World 1", Toast.LENGTH_LONG).show();
}
import android.content.Context
import android.widget.Toast
object Utility {
fun Display2(mContext: Context) {
Toast.makeText(mContext, "Hello, World 2", Toast.LENGTH_LONG).show();
}
}
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();
}
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();
}
}
事实上,两者都是好的。用例将主要取决于方法的可见性。在第二种情况下,您有更多的可见性控制,因为它不受包的限制(与第一种情况类似)。我相信第一种情况会迫使您将.kt文件放在最高的包层次结构中,以便在代码中的任何地方都可以使用。实际上,任何一种都是好的。用例将主要取决于方法的可见性。在第二种情况下,您有更多的可见性控制,因为它不受包的限制(与第一种情况类似)。我相信第一种情况会迫使您将.kt文件放在最高的包层次结构中,以便在代码中的任何地方使用。绝对不是第二种方法。如果方法是对象的特定用例,那么第一种方法就可以了 但是,在您的示例中,您可能希望在上下文可用时调用该方法。然后,我建议改为使用扩展
fun Context.display1(){
// In the function, `this` is refer to the context
Toast.makeText(mContext, "Hello, World 1", Toast.LENGTH_LONG).show();
}
然后,在活动中
,您可以像
fun example() {
display1()
}
而不是
fun example() {
Display1(this)
}
绝对不是第二条路。如果方法是对象的特定用例,那么第一种方法就可以了 但是,在您的示例中,您可能希望在上下文可用时调用该方法。然后,我建议改为使用扩展
fun Context.display1(){
// In the function, `this` is refer to the context
Toast.makeText(mContext, "Hello, World 1", Toast.LENGTH_LONG).show();
}
然后,在活动中
,您可以像
fun example() {
display1()
}
而不是
fun example() {
Display1(this)
}
让我们反编译kotlin字节码并查看java代码 myClass1.kt
import android.content.Context
import android.widget.Toast
fun Display1(mContext: Context){
Toast.makeText(mContext, "Hello, World 1", Toast.LENGTH_LONG).show();
}
import android.content.Context
import android.widget.Toast
object Utility {
fun Display2(mContext: Context) {
Toast.makeText(mContext, "Hello, World 2", Toast.LENGTH_LONG).show();
}
}
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();
}
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
import android.content.Context
import android.widget.Toast
fun Display1(mContext: Context){
Toast.makeText(mContext, "Hello, World 1", Toast.LENGTH_LONG).show();
}
import android.content.Context
import android.widget.Toast
object Utility {
fun Display2(mContext: Context) {
Toast.makeText(mContext, "Hello, World 2", Toast.LENGTH_LONG).show();
}
}
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();
}
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();
}
}
第二种方式显然不是你想要的。有一个不需要的实例创建 让我们反编译kotlin字节码并查看java代码 myClass1.kt
import android.content.Context
import android.widget.Toast
fun Display1(mContext: Context){
Toast.makeText(mContext, "Hello, World 1", Toast.LENGTH_LONG).show();
}
import android.content.Context
import android.widget.Toast
object Utility {
fun Display2(mContext: Context) {
Toast.makeText(mContext, "Hello, World 2", Toast.LENGTH_LONG).show();
}
}
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();
}
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
import android.content.Context
import android.widget.Toast
fun Display1(mContext: Context){
Toast.makeText(mContext, "Hello, World 1", Toast.LENGTH_LONG).show();
}
import android.content.Context
import android.widget.Toast
object Utility {
fun Display2(mContext: Context) {
Toast.makeText(mContext, "Hello, World 2", Toast.LENGTH_LONG).show();
}
}
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();
}
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();
}
}
第二种方式显然不是你想要的。有一个不需要的实例创建 @pokemzok首先,第二种方法是对象方法,甚至不是静态的(Kotlin需要伴生对象)。即使它是伴生对象,这也不是Kotlin的方式,更像Java。此外,它还可以处理不太详细的空对象,
context?.display1()
。此外,您正在创建一个没有目的的实用程序类。将函数放在类之外也可以达到同样的目的。@pokemzok首先,第二种方法是对象方法,甚至不是静态的(Kotlin需要伴随对象)。即使它是伴生对象,这也不是Kotlin的方式,更像Java。此外,它还可以处理不太详细的空对象,context?.display1()
。此外,您正在创建一个没有目的的实用程序类。将函数放在类之外也可以达到同样的目的。