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

Я знаю, что в Котлин нет статической функции, поэтому я пишу два кода в 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
Подавить жалобы Dokka о «Нет документации для com.foo.Bar $ toString ()»? Почему Spring-data-elasticsearch не использует объект-образец из весеннего контекста Kotlin – извлечение списка родительских объектов предметов в коллекции Объясните, почему показано предупреждение. Не отмечен ли источник-источник.readArrayList (data !!. JavaClass.classLoader) как ArrayList <Data>? Kotlin Json Parser Тестирование блоков Kotlin coroutines с использованием mockito Отсутствует конструктор для DialogPreference Требует аннотации продюсирования с «allOf» в Котлине Кнопка Kotlin setOnclickListener не работает Как проверить общий тип в Kotlin Тестирование с помощью spek и обмен некоторыми базовыми тестовыми примерами для базовых классов BiMap / 2-way hashmap в Котлине Могу ли я обеспечить нулевую безопасность для типов платформ из Java API? Kotlin падает на Android, когда выбранный вид элемента равен нулю Как упаковать родную библиотеку kotlin, чтобы ее можно было использовать в проектах Android и iOS?