Jestem nowy w Kotlin i niedawno przekonwertowałem prosty plik z javy na Kotlin. Zastanawiam się, dlaczego konwerter Androida zmienił moją klasę Java na obiekt Kotlin.
Jawa:
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;
}
}
Przekonwertowany Kotlin:
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
}
}
Dlaczego tak się nie stało:
class MyClass {
... etc ...
}
Każda pomoc byłaby bardzo mile widziana, dzięki.
Obiekt jest singletonem. Nie musisz tworzyć instancji, aby z niej korzystać.
Aby można było użyć klasy, należy utworzyć instancję
W ten sam sposób, w jaki w Javie możesz powiedzieć Math.sqrt (2) i nie musisz tworzyć instancji Math, aby używać sqrt, w Kotlin możesz utworzyć obiekt do przechowywania tych metod i są one faktycznie statyczne.
Tutaj jest trochę informacji:
https://kotlinlang.org/docs/reference/object-declarations.html
IntelliJ był oczywiście wystarczająco inteligentny, aby wykryć, że potrzebujesz obiektu, ponieważ masz tylko statyczne metody Java.
źródło
Human
ma statyczne pole intPopulation
, jak by to wyglądało w Kotlinie?companion object { @JvmField val Population; }
lub coś?Możesz także zdefiniować funkcje bez deklaracji obiektu. Tylko w pliku .kt Na przykład:
Ta funkcja była związana z pakietem, w którym jest zadeklarowany plik .kt. Możesz przeczytać więcej na ten temat tutaj https://kotlinlang.org/docs/reference/packages.html
źródło
Opierając się na odpowiedzi @ speirce7:
Poniższy kod przedstawia podstawową różnicę między klasą a obiektem, jeśli chodzi o Kotlin:
źródło