Ich bin neu in Kotlin und habe kürzlich eine einfache Datei von Java nach Kotlin konvertiert. Ich frage mich, warum der Android-Konverter meine Java-Klasse in ein Kotlin-Objekt geändert hat.
Java:
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;
}
}
Konvertierter 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
}
}
Warum war es nicht:
class MyClass {
... etc ...
}
Jede Hilfe wäre sehr dankbar, danke.
Ein Objekt ist ein Singleton. Sie müssen keine Instanz erstellen, um sie zu verwenden.
Eine Klasse muss instanziiert werden, um verwendet zu werden
Genauso wie Sie in Java Math.sqrt (2) sagen und keine Math-Instanz erstellen müssen, um sqrt zu verwenden, können Sie in Kotlin ein Objekt erstellen, das diese Methoden enthält, und sie sind effektiv statisch.
Hier gibt es einige Infos:
https://kotlinlang.org/docs/reference/object-declarations.html
IntelliJ war offensichtlich intelligent genug, um zu erkennen, dass Sie ein Objekt benötigen, da Sie nur statische Java-Methoden haben.
quelle
Human
ein statisches int-Feld hatPopulation
, wie würde das in Kotlin aussehen?companion object { @JvmField val Population; }
oder so?Sie können auch Funktionen ohne Objektdeklaration definieren. Nur in der .kt-Datei Zum Beispiel:
Und diese Funktion bezog sich auf ein Paket, in dem die .kt-Datei deklariert ist. Weitere Informationen finden Sie hier https://kotlinlang.org/docs/reference/packages.html
quelle
Aufbauend auf der Antwort von @ speirce7:
Der folgende Code zeigt den grundlegenden Unterschied zwischen einer Klasse und einem Objekt, wenn es um Kotlin geht:
quelle