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

Я знаю, что в Котлин нет статической функции, поэтому я пишу два кода в 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
Предоставлять насмешливый объект другому конструктору конструктивного объекта? Имеет ли Kotlin метод-CALL ярлыки? KotlinNullPointerException: внутри onCreateOptionsMenu не удается найти searchView; андроид Отказываясь от ответов API с помощью Mockito Каков наилучший способ сделать снимок и показать результат с помощью Kotlin Anko? Как создать бесконечно длинную последовательность в Котлине Присвоение не допускается при выражении? Почему невозможно использовать ссылки на методы `suspend` в Kotlin? Быстрый способ получить номер месяца от java.util.Date Невозможно добавить фрагменты с помощью функции расширения Kotlin Вводные общие типы в Котлин с кинжалом 2 Использование данных Amazon AWS Cognito `. Well-known / jwks.json` не позволяет base64 декодировать некоторые поля Kotlin отражают proguard SmallSortedMap ListView может отображаться в Activity, но не может отображаться в фрагменте IntArray vs Array <Int> в Котлине