Java 库中类型转换的asX与toX前缀

Java 库中类型转换的asX与toX前缀,java,kotlin,android-library,Java,Kotlin,Android Library,我主要是一名Android开发人员,但我想同样的规则也应该适用于标准Java和Kotlin 选择作为(如asLiveData、asStateFlow)或作为(如toString)从一种类型转换为另一种类型的标准是什么 现在是我真正的问题。我制作了两个扩展函数,它们将字节数组转换为十六进制字符串,反之亦然。什么命名法更有意义 String.toByteArrayFromHexvsString.asByteArrayFromHex ByteArray.toHexStringvsByteArray

我主要是一名Android开发人员,但我想同样的规则也应该适用于标准Java和Kotlin

  • 选择作为(如asLiveData、asStateFlow)或作为(如toString)从一种类型转换为另一种类型的标准是什么

  • 现在是我真正的问题。我制作了两个扩展函数,它们将字节数组转换为十六进制字符串,反之亦然。什么命名法更有意义

  • String.toByteArrayFromHex
    vs
    String.asByteArrayFromHex


    ByteArray.toHexString
    vs
    ByteArray.asHexString
    我认为Kotlin标准库中的这些命名约定没有正式记录,但我注意到了一些相当常见的模式。例如:

    • to()
      -将对象转换为所需类型,并返回它(原始类型不变,独立于新类型)。这当然是最常见的示例

    • as()
      -返回对象的视图(不会立即更改原始视图;但是,稍后对对象状态的更改将反映在视图中,如果合适,反之亦然)。例如:

    • ()
      -在适当的位置变异对象(通常不返回任何内容)。例如:

    • ed()

    • OrNull()
      -表示如果没有可返回的有效值,则方法将返回null(而不是抛出异常或返回其他默认值)

    与所有约定一样,没有什么强迫您使用这些命名模式——但如果您这样做,它们将更自然地适应现有代码,人们会发现它们的使用更加直观

    (并非所有库方法都遵循这些约定;例如,
    map()
    filter())
    是动词,但不会变异其接收者。但是,它们早于Kotlin,因此可以理解,它们坚持使用已知的现有名称。JetBrains似乎更严格地遵守这些约定;例如,在Kotlin 1.4中,它们不赞成使用该函数,而赞成使用新名称。)


    在您的示例中,
    ByteArray.toHexString()
    将是一个非常好的名称,因为它将数组转换为新类型,而不保留与原始类型的任何连接。我认为任何看到该名称的人都会立即知道它的作用(无论如何,或多或少;params或docs必须指定详细信息,例如它使用了什么分隔符(如果有),以及它是使用大写还是小写。)

    类似地,
    String.toByteArrayFromHex()
    比另一种方法清晰得多,尽管我不确定它读起来是否正确。那么
    String.hexToByteArray()