Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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
有没有办法将java方法声明为kotlin的中缀_Java_Kotlin_Dsl - Fatal编程技术网

有没有办法将java方法声明为kotlin的中缀

有没有办法将java方法声明为kotlin的中缀,java,kotlin,dsl,Java,Kotlin,Dsl,有没有一种方法可以从java类声明一个方法,这样它就可以作为kotlin的infix函数调用,如下所示: public class Foo { public void doFoo (String bar) {} } 然后从一个kotlin文件 foo doFoo "bar" 由于Java无法标记使用运算符语法有意义的方法,Kotlin允许使用具有正确名称和签名的任何Java方法作为运算符重载和其他约定(invoke()等)。不允许使用中缀调用语法调用Java方法。 您可以添加infix

有没有一种方法可以从java类声明一个方法,这样它就可以作为kotlin的
infix
函数调用,如下所示:

public class Foo {
  public void doFoo (String bar) {}
}
然后从一个kotlin文件

foo doFoo "bar"

由于Java无法标记使用运算符语法有意义的方法,Kotlin允许使用具有正确名称和签名的任何Java方法作为运算符重载和其他约定(
invoke()
等)。不允许使用中缀调用语法调用Java方法。


您可以添加
infix
扩展以从Kotlin获取该语法:

infix fun Foo.doFoo(bar: String) {
    return doFoo(bar)
}

行为改变了吗?链接的副本似乎表明这是可能的。副本(以及zsmb13的答案)似乎表明,可以通过在围栏的Kotlin一侧定义一个包装器来实现,但无法纯粹通过Java代码将该方法声明为中缀。您加粗体的部分将与此相矛盾。如果定义包装器,则允许使用中缀调用语法调用Java方法。将Java代码中的Java方法标记为中缀是不可能的(我愿意接受这一点,但我看不出它们为什么不能使用注释来完成同样的事情)一个@infix注释就可以了。。。遗憾的是,他们没有这么做,因为这个问题不是重复的想法。怎么会这样?对我来说似乎完全一样。如果你概述了两者的区别,那么我会很高兴地重新打开。请参阅@JoeClay comment,我不是在寻找包装器问题是一样的-使用包装器只是实现它的一种(唯一)方法-因此它是重复的。我在答案中添加了一行,指定在Java代码中没有“本机”实现这一点的方法。他正试图完成与你完全相同的事情,只是他离解决方案有点近。我对问题进行了编辑,使其更接近实际情况。信息更加集中,不那么分散,这符合每个人的最佳利益。不要认为我关闭了它是针对个人的。这是一种有趣的方式,但是它没有维护文档