Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为Kotlin扩展函数的接收者添加KDoc注释(Java中的第一个参数,`this`in Kotlin)_Java_Kotlin_Extension Methods_Kdoc - Fatal编程技术网

如何为Kotlin扩展函数的接收者添加KDoc注释(Java中的第一个参数,`this`in Kotlin)

如何为Kotlin扩展函数的接收者添加KDoc注释(Java中的第一个参数,`this`in Kotlin),java,kotlin,extension-methods,kdoc,Java,Kotlin,Extension Methods,Kdoc,考虑这个非扩展函数: fun checkArguments(expression: Boolean) { if (!expression) { throw IllegalArgumentException() } } fun Boolean.checkArguments() { if (!this) { throw IllegalArgumentException() } } 在kotlin和java中使用此函数时,可以看到其参

考虑这个非扩展函数:

fun checkArguments(expression: Boolean) {
    if (!expression) {
        throw IllegalArgumentException()
    }
}
fun Boolean.checkArguments() {
    if (!this) {
        throw IllegalArgumentException()
    }
}
在kotlin和java中使用此函数时,可以看到其参数名:
expression

我还可以编写与扩展函数相同的功能:

fun checkArguments(expression: Boolean) {
    if (!expression) {
        throw IllegalArgumentException()
    }
}
fun Boolean.checkArguments() {
    if (!this) {
        throw IllegalArgumentException()
    }
}

当我以这种方式将其写入扩展函数时,调用它的布尔值的参数名(函数中的
this
变量,也称为接收方)显示为
$this$checkArguments
。如何为该参数添加KDoc文档注释?使用
@param$this$checkArguments
似乎无法记录它。

您可以使用
@receiver
记录扩展函数的接收器。这是你的电话号码

例如:

/**
*@receiver至少四个字符长的字符串
*/
fun String.firstFour()=此.substring(0,4)

“表达式”是常规函数版本中的一个参数。当您将其设置为扩展函数时,没有参数。正如您的定义所示,参数将成为接收者…您扩展的对象本身。直接在没有参数的布尔值上调用
checkArguments
。没有第一个参数。接收器是
。这相当于您展示的标准函数版本中的参数,但两者是不同的。它们不是写同一件事的两种方式。它们是不同的东西。我唯一想告诉你的是,该方法在Java中是这样的:
公共静态布尔checkArguments(boolean receiver){if(!receiver){throw IllegalArgumentException()}
-它在一个类中,其名称取决于函数所在的文件。-但是你永远看不到这一点,所以你不能“注释它”。让我们来看看。@Steve事实上,在扩展函数的接收器上放置文档注释是可能的。我的回答描述了如何做到这一点。酷。然而,问题不在于参数的有趣名称是否可以改为“表达式”吗?在评论中有什么特别的东西可以改变吗我猜我在想OP已经用尽了标准的文档机制,因为他似乎有意记录一个奇怪的案例。如果这足以让他不用编写第二个函数,那就太好了@史蒂夫:谢谢你的回答——我可以肯定地看到你是如何从最初的问题措辞中得到这个答案的,而这个问题并不是100%清楚的。基于OP接受答案和他们的编辑添加到问题中(我删除了一个额外的澄清编辑),我认为这实际上是他们想要回答的问题。在回答之前,我试图找到一份副本,但没找到一份令我惊讶。如果真的没有复制品,这看起来是重新打开的好办法。我同意。我投票决定重新开张。我仍然认为问题本身可以更清楚地说明需要什么。@Steve这并不是一个
奇怪的案例
,我只是编写kotlin的代码,这些代码将用于java和kotlin。我希望java用户和kotlin用户有相同的体验。实际上,
@receiver
是不够的,我真的很想用一种方法(看起来像
@receiver(expression)
)将
receiver
$this
)重命名为
expression
@FredSuvn,很遗憾,这表明这是不可能的。