1. ホーム
  2. java

[解決済み] Kotlinにおけるクラスとオブジェクトの違い

2022-07-02 05:44:08

質問

私は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のオブジェクトはインスタンス化できないクラスのようなものなので、名前をつけて呼び出す必要があります。(それ自体は静的なクラス)

アンドロイドコンバータは、あなたのクラスには静的メソッドしか含まれていないことを見抜き、Kotlinオブジェクトに変換しました。

詳しくはこちらをご覧ください。 http://petersommerhoff.com/dev/kotlin/kotlin-for-java-devs/#objects