Saya baru mengenal Kotlin dan baru-baru ini mengonversi file sederhana dari java ke Kotlin. Saya bertanya-tanya mengapa konverter Android mengubah kelas java saya menjadi objek 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;
}
}
Kotlin yang Dikonversi:
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
}
}
Kenapa tidak:
class MyClass {
... etc ...
}
Bantuan apa pun akan sangat dihargai, terima kasih.
Objek adalah singleton. Anda tidak perlu membuat instance untuk menggunakannya.
Sebuah kelas perlu dibuat instance-nya untuk digunakan
Dengan cara yang sama seperti di Java, Anda dapat mengatakan Math.sqrt (2) dan Anda tidak perlu membuat instance Math untuk menggunakan sqrt, di Kotlin Anda dapat membuat objek untuk menampung metode ini, dan secara efektif bersifat statis.
Ada beberapa info disini:
https://kotlinlang.org/docs/reference/object-declarations.html
IntelliJ jelas sudah cukup pintar untuk mendeteksi Anda memerlukan objek karena Anda hanya memiliki metode java statis.
sumber
Human
memiliki kolom int statisPopulation
, bagaimana tampilannya di Kotlin?companion object { @JvmField val Population; }
atau sesuatu?Anda juga bisa mendefinisikan fungsi tanpa deklarasi objek. Hanya di file .kt Misalnya:
Dan fungsi ini terkait dengan paket di mana file .kt dideklarasikan. Anda dapat membaca lebih lanjut di sini https://kotlinlang.org/docs/reference/packages.html
sumber
Berdasarkan jawaban @ speirce7:
Kode berikut menunjukkan perbedaan mendasar antara Class dan Object saat berhubungan dengan Kotlin:
sumber