Je suis nouveau sur Kotlin et j'ai récemment converti un simple fichier de java en Kotlin. Je me demande pourquoi le convertisseur Android a changé ma classe java en un objet 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 converti:
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
}
}
Pourquoi n'était-ce pas:
class MyClass {
... etc ...
}
Toute aide serait grandement appréciée, merci.
Un objet est un singleton. Vous n'avez pas besoin de créer une instance pour l'utiliser.
Une classe doit être instanciée pour être utilisée
De la même manière qu'en Java, vous pouvez dire Math.sqrt (2) et vous n'avez pas besoin de créer une instance Math pour utiliser sqrt, dans Kotlin vous pouvez créer un objet pour contenir ces méthodes, et elles sont effectivement statiques.
Il y a quelques informations ici:
https://kotlinlang.org/docs/reference/object-declarations.html
IntelliJ a évidemment été suffisamment intelligent pour détecter que vous avez besoin d'un objet puisque vous n'avez que des méthodes java statiques.
la source
Human
a un champ int statiquePopulation
, à quoi cela ressemblerait-il dans Kotlin?companion object { @JvmField val Population; }
ou quelque chose?Vous pouvez également définir des fonctions sans déclaration d'objet. Juste dans un fichier .kt Par exemple:
Et cette fonction était liée au package où le fichier .kt est déclaré. Vous pouvez en savoir plus ici https://kotlinlang.org/docs/reference/packages.html
la source
S'appuyant sur la réponse de @ speirce7:
Le code suivant montre la différence fondamentale entre une classe et un objet en ce qui concerne Kotlin:
la source