Какой способ лучше, если я надеюсь использовать синтаксис, как статическая функция в Котлин?

Я знаю, что в Котлин нет статической функции, поэтому я пишу два кода в 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(); } } 

Давайте декомпилируем байт-код kotlin и посмотрим на 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) } 

На самом деле один из них хорош. Случай использования будет зависеть в основном от видимости методов. У вас больше контроля видимости во втором случае, потому что он не ограничен пакетом (как и первый). Первый случай, который, я полагаю, заставит вас поместить ваш .kt-файл в иерархию наивысших пакетов, чтобы использоваться повсюду в вашем коде.

Intereting Posts
Firebase неразрешенный супертип с Kotlin на Android Как издеваться над одним и тем же методом несколько раз, используя mockito Уведомление о прямом ответе начинает действие Проверка значений параметров EditText вызывает сбой Parse String шаблон вместо файла в Pebble Template Engine Как настроить веб-проект с помощью Kotlin в фоновом и в браузере? Kotlin – как найти количество повторяющихся значений в списке? Если дети RecyclerView соответствуют высоте родителя при использовании конструктора вместо надувания, чтобы создать их Spring Boot вставляет недопустимое datetime в MariaDB, приводит к нулевому значению, а не к нулевому полю Синтаксис Kotlin для наблюдателя LiveData? Есть ли лучший способ написать это в котлин? Kotlin: Что делают унарные плюсы / минусы для чисел? Kotlin: безопасные лямбда (нет утечки памяти)? Kotlin сортирует массив по значению в диапазоне Kotlin и RxJava2 zip operator – Ни одна из следующих функций не может быть вызвана с предоставленными аргументами