Kotlin中的一个类和一个对象之间的区别

我是Kotlin的新手,最近把一个简单的文件从java转换为Kotlin。 我想知道为什么Android转换器更改我的java类到Kotlin对象。

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; } } 

转换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 } } 

为什么不是这样:

 class MyClass { ... etc ... } 

任何帮助将不胜感激谢谢。

Kotlin对象就像一个不能被激发的类,所以它必须被名字调用。 (一个静态类每个说)

android转换器看到你的类只包含一个静态方法,所以它转换成一个Kotlin对象。

在这里阅读更多关于它: http : //petersommerhoff.com/dev/kotlin/kotlin-for-java-devs/#objects

一个对象是一个单例。 你不需要创建一个实例来使用它。

一个类需要实例化才能使用

就像在Java中一样,你可以说Math.sqrt(2),你不需要创建一个数学实例来使用sqrt,在Kotlin中你可以创建一个对象来保存这些方法,而且它们是有效的静态的。

这里有一些信息:

https://kotlinlang.org/docs/reference/object-declarations.html

IntelliJ显然足够聪明,可以检测到你需要一个对象,因为你只有静态的java方法。

你也可以定义没有对象声明的函数。 只需在.kt文件中例如:

 fun GenerateChecksumCrc16(bytes: ByteArray): Int { ... } 

而这个函数和package相关的地方是.kt文件被声明。 你可以在这里阅读更多关于https://kotlinlang.org/docs/reference/packages.html