Я новичок в Kotlin и недавно преобразовал простой файл с java в Kotlin. Мне интересно, почему конвертер Android изменил мой класс java на объект Kotlin.
Ява:
public class MyClass {
static public int GenerateChecksumCrc16(byte bytes[]) {
int crc = 0xFFFF;
int temp;
int crc_byte;
for (byte aByte : bytes) {
crc_byte = aByte;
for (int bit_index = 0; bit_index < 8; bit_index++) {
temp = ((crc >> 15)) ^ ((crc_byte >> 7));
crc <<= 1;
crc &= 0xFFFF;
if (temp > 0) {
crc ^= 0x1021;
crc &= 0xFFFF;
}
crc_byte <<= 1;
crc_byte &= 0xFF;
}
}
return crc;
}
}
Конвертированный Котлин:
object MyClass {
fun GenerateChecksumCrc16(bytes: ByteArray): Int {
var crc = 0xFFFF
var temp: Int
var crc_byte: Int
for (aByte in bytes) {
crc_byte = aByte.toInt()
for (bit_index in 0..7) {
temp = crc shr 15 xor (crc_byte shr 7)
crc = crc shl 1
crc = crc and 0xFFFF
if (temp > 0) {
crc = crc xor 0x1021
crc = crc and 0xFFFF
}
crc_byte = crc_byte shl 1
crc_byte = crc_byte and 0xFF
}
}
return crc
}
}
Почему не было:
class MyClass {
... etc ...
}
Любая помощь будет принята с благодарностью.
Объект - это синглтон. Для его использования не нужно создавать экземпляр.
Для использования класса необходимо создать экземпляр
Точно так же, как в Java вы можете сказать Math.sqrt (2), и вам не нужно создавать экземпляр Math для использования sqrt, в Kotlin вы можете создать объект для хранения этих методов, и они фактически статичны.
Здесь есть некоторая информация:
https://kotlinlang.org/docs/reference/object-declarations.html
IntelliJ, очевидно, был достаточно умен, чтобы обнаружить, что вам нужен объект, поскольку у вас есть только статические java-методы.
источник
Human
есть статическое поле intPopulation
, как это будет выглядеть в Kotlin?companion object { @JvmField val Population; }
или что-то?Также вы можете определять функции без объявления объекта. Только в файле .kt Например:
И эта функция была связана с пакетом, в котором объявлен файл .kt. Подробнее об этом можно прочитать здесь https://kotlinlang.org/docs/reference/packages.html.
источник
Основываясь на ответе @ speirce7:
Следующий код показывает основное различие между классом и объектом, когда дело доходит до Kotlin:
источник