Что бы вы ни делали, чтобы защитить секретные ключи, это не будет реальным решением. Если разработчик может декомпилировать приложение, нет способа защитить ключ, скрывая ключ, это просто защита от неизвестности, а также обфускация кода. Проблема с обеспечением секретного ключа заключается в том, что для его защиты вам нужно использовать другой ключ, и этот ключ также должен быть защищен. Подумайте о ключе, спрятанном в ящике, который заблокирован ключом. Вы помещаете коробку внутри комнаты и запираете комнату. У вас остается другой ключ для обеспечения безопасности. И этот ключ все еще будет жестко закодирован внутри вашего приложения.
Поэтому, если пользователь не вводит ПИН или фразу, нет способа скрыть ключ. Но для этого вам нужно будет иметь схему управления PIN-кодом, происходящим вне диапазона, а это означает, что с помощью другого канала. Конечно, это не практично для обеспечения ключей для таких сервисов, как API Google.
Цель такая же, как у C или Java void
. Только Unit является подходящим типом, поэтому его можно передать как общий аргумент и т. Д.
Nothing
, что означает просто «никакого значения вообще», т. е. вычисление не завершилось нормально (зацикливание навсегда или исключение). Мы не могли позволить себе столкновение значений. Unit
Основная причина, по которой подразделение существует, объясняется общими причинами. Давайте используем этот пример из документов Kotlin.
class Box<T>(t: T) {
var value = t
}
Мы можем иметь
var box = Box(Unit)
. Именно поэтому Unit возвращает значение, поэтому Kotlin может вывести его из типа, переданного в инициализация класса. Разумеется, вы также можете явно записать его следующим образом:
var box = Box<Unit>(Unit)
, но все равно он должен иметь возвращаемое значение. Теперь ключевым словом void в Java в Котлине является Nothing . Ничто - это последний, но один тип иерархии типов в Котлине, последний из которых является Nothing? (Nullable Nothing). Это не возвращает никакой ценности. Поскольку он не возвращает никакого значения вообще, мы не можем передать его как тип в приведенном выше коде.
var box = Box(Nothing) //This will return an Error
UNIT
на самом деле содержит ценную информацию, в основном это означает «СОВЕРШЕННО». Он просто возвращает информацию вызывающему, что метод закончен. Это реальная информация, поэтому ее можно рассматривать как возвращаемое значение метода .