有没有办法将java方法声明为kotlin的中缀
有没有一种方法可以从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
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代码中没有“本机”实现这一点的方法。他正试图完成与你完全相同的事情,只是他离解决方案有点近。我对问题进行了编辑,使其更接近实际情况。信息更加集中,不那么分散,这符合每个人的最佳利益。不要认为我关闭了它是针对个人的。这是一种有趣的方式,但是它没有维护文档