Это ваша основная библиотека. Также общее правило для производственного кода, старайтесь избегать использования альфа. Обновите следующие библиотеки, и все будет в порядке.
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.0.1'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.0.1'
кастинг к Строке является более дешевым, так как это не требует внешнего вызова функции, просто внутренней проверки типа.
Я использовал бы бросок. Это проверяет Ваше "знание", что это - строка. Если по любой причине Вы заканчиваете с ошибкой, и кто-то передает в чем-то другом, чем строка, я думаю, что было бы лучше выдать исключение (который бросок сделает), чем продолжают выполняться с дефектными данными.
Согласно Глупым размышлениям производительности: x.toString () по сравнению со (Строкой) x
В конце thend результаты удивительно ясны: это по крайней мере вдвое более быстро для кастинга Объекта Представить в виде строки, чем назвать Object.toString ()
Если бы Вы знаете, что Объектом o является Строка, я сказал бы, просто бросает его к Строке и осуществляют его тот путь. Вызовом toString () на объекте, который Вы знаете наверняка, является Строка, мог бы просто добавить беспорядок.
Если Объект o мог бы быть чем-нибудь кроме Строки, необходимо будет назвать toString ().
Я не был бы слишком заинтересован производительностью, если эта операция сделана даже всего несколько тысяч раз в секунду - нет никакого материального различия.
Я был бы, однако, заинтересован "знания" входа. У Вас есть метод, который принимает Object
и необходимо рассматривать его как таковой, т.е. Вы не должны знать, что что-либо о параметре, кроме него придерживается Object
интерфейс, который, оказывается, имеет a toString()
метод. В этом случае я настоятельно рекомендовал бы использовать тот метод вместо того, чтобы просто принять что-либо.
OTOH, если вход всегда также String
или null
, просто измените метод для принятия String
s, и проверка явно на null
s (который необходимо сделать так или иначе, имея дело с непримитивами...),
Если то, что Вы имеете в "o", является Строкой затем нет большой части различия (вероятно, бросок быстрее, но это - вещь реализации VM/Library).
Если "o" не может быть Строка, но он, как предполагается, Строка затем, бросок - то, что Вы хотите (но необходимо заставить метод взять Строку вместо Объекта).
Если "o" мог бы быть каким-либо типом затем, Вы должны использовать toString - но, несомненно, проверите на пустой указатель сначала.
void foo(final Object o)
{
final String str;
// without this you would get a class cast exception
// be wary of using instanceof though - it is usually the wrong thing to do
if(o instanceof String)
{
str = (String)o;
}
}
или
void foo(final Object o)
{
final String str;
// if you are 100% sure that o is not null then you can get rid of the else
if(o != null)
{
str = o.toString();
}
}
Я кодировал бы последний как:
void foo(final Object o)
{
final String str;
if(o == null)
{
throw new IllegalArgumentException("o cannot be null");
}
str = o.toString();
}
Я нашел странно, что бросок был медленнее, чем vtable поиск, подразумеваемый вызовом tostring.
Учитывая, что ссылочным типом является Объект, и все Объекты имеют toString (), просто называют object.toString (). String.toString () просто возвращает это.
В o не может быть 'пустой строки'. Если o является пустым, он не содержит пустую строку, это является просто пустым. Просто проверьте o на пустой указатель сначала. Если Вы бросите или назовете ToString () на пустом указателе, то Вы откажете.