Вы можете использовать Средство просмотра байт-кода Kotlin , чтобы узнать, для чего эти опции скомпилированы.
В Kotlin 1.0.2 скомпилированный байт-код показывает, что свойство
val
в object
или companion object
скомпилировано в поле private static final
внутри класса:
// access flags 0x1A
private final static I FILES_TO_DOWNLOAD = 100
и геттер, который вызывается при обращении к свойству:
// access flags 0x1019
public final static synthetic access$getFILES_TO_DOWNLOAD$cp()I
Из Java геттер может называться DefaultValues.INSTANCE.getFILES_TO_DOWNLOAD()
или DefaultValues.Companion.getFILES_TO_DOWNLOAD()
соответственно.
Свойство верхнего уровня, не относящегося к const
, компилируется в то же самое в (1) с той лишь разницей, что поле и геттер теперь помещены в класс FilenameKt
.
Но верхний уровень const val
компилируется в поле public static final
:
// access flags 0x19
public final static I DEFAULT_FILES_TO_DOWNLOAD = 100
Такое же общедоступное статическое конечное поле будет создано, когда const val
объявлено внутри объекта. Кроме того, вы можете получить тот же результирующий байт-код, если добавите аннотацию @JvmField
к свойствам, объявленным в (1) .
Таким образом, вы можете определить поле public static final
, используя const
или @JvmField
, либо в object
, либо на верхнем уровне.
Размер объекта DataStore App Engine ограничен 1 МБ. Вы не сможете сохранить более крупную сущность.
Бесплатная квота для DataStore составляет 1 ГБ. Если вы превысите его с отключенным биллингом, вы не сможете сохранять новые объекты или увеличивать существующие объекты. Если у вас включена оплата, с вас будет взиматься плата за дополнительное хранилище.
Ограничение для статических файлов App Engine составляет 10 МБ. Статический файл не может быть изменен вашим приложением, его можно только повторно загрузить или удалить с помощью инструмента appcfg.py. Вы не сможете загрузить файл размером более 10 МБ.