如何将Java转换成Kotlin

时间:2019-03-21 08:33:38

标签: java kotlin

我不知道是否有人已经回答了这个问题。如果是这种情况,请进行补偿。

我想将此函数转换为Kotlin函数。感谢您的帮助。

private final static String HEX = "XXXXXXXXX";
private static void appendHex(StringBuffer sb, byte b) {
    sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));
}

3 个答案:

答案 0 :(得分:4)

我建议为此使用扩展功能:

private const val HEX = "XXXXXXXXX"
fun StringBuffer.appendHex(b: Byte): StringBuffer {
    val i = b.toInt()
    append(HEX[i shr 4 and 0x0f])
    append(HEX[i and 0x0f])
    return this
}

我还使函数再次返回this,因此您甚至可以在链中调用它:

myStringBuffer
   .append(someThing)
   .appendHex(myByte)
   .append(someThingElse)

答案 1 :(得分:2)

如果您只需要一个十六进制字符串表示形式(这也是我从您的评论中得到的内容),那么您可能只想使用以下内容:

fun StringBuffer.appendHex(b : Byte) = append("%02X".format(b))

用法与Lino所显示的相同:

StringBuffer()
    .append("some text")
    .appendHex(someByte)

或者如果您需要保留当前签名:

companion object {
  @JvmStatic
  fun appendHex(s : StringBuffer, b : Byte) {
    s.append("%02X".format(b))
  }
}

答案 2 :(得分:1)

companion object {
    private const val HEX = "XXXXXXXXX"

    @JvmStatic
    private fun appendHex(sb: StringBuffer, b: Int) {
        sb.append(HEX[b shr 4 and 0x0f]).append(HEX[b and 0x0f])
    }
}

请注意,我必须将Byte更改为Int,因为Byte似乎没有为某些未知对象定义shrand原因。

不,我真的不知道为什么不会在 byte 上定义按位运算符。