Soy nuevo en Kotlin y recientemente he convertido un archivo simple de Java a Kotlin. Me pregunto por qué el convertidor de Android cambió mi clase java a un objeto 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 convertido:
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
}
}
¿Por qué no fue así?
class MyClass {
... etc ...
}
Cualquier ayuda sería muy apreciada, gracias.
Un objeto es un singleton. No es necesario crear una instancia para usarlo.
Es necesario crear una instancia de una clase para poder usarla
De la misma manera que en Java puede decir Math.sqrt (2) y no necesita crear una instancia de Math para usar sqrt, en Kotlin puede crear un objeto para contener estos métodos, y son efectivamente estáticos.
Hay algo de información aquí:
https://kotlinlang.org/docs/reference/object-declarations.html
IntelliJ obviamente ha sido lo suficientemente inteligente como para detectar que necesita un objeto, ya que solo tiene métodos estáticos de Java.
fuente
Human
tiene un campo int estáticoPopulation
, ¿cómo se vería eso en Kotlin?companion object { @JvmField val Population; }
¿o algo?También puede definir funciones sin declaración de objeto. Solo en archivo .kt Por ejemplo:
Y esta función estaba relacionada con el paquete donde se declara el archivo .kt. Puede leer más sobre esto aquí https://kotlinlang.org/docs/reference/packages.html
fuente
Basándose en la respuesta de @ speirce7:
El siguiente código muestra la diferencia básica entre una clase y un objeto cuando se trata de Kotlin:
fuente