有没有一种方法可以将Java方法声明为Kotlin中的中缀函数?

3
是否有一种方式可以从Java类中声明一个方法,使其可在Kotlin中作为“infix”函数调用,例如:infix fun method()
public class Foo {
  public void doFoo (String bar) {}
}

然后从 Kotlin 文件中

foo doFoo "bar"

问题虽然不是重复的。 - Vinz243
怎么回事?在我看来它们是一模一样的。如果你能指出区别,我很乐意重新打开。 - Michael
请看@JoeClay的评论,我不是在寻找一个包装器。 - Vinz243
1
中缀运算符不仅仅是“相关的”。他试图做的事情与你完全相同,只是他离解决方案更近一些。我已经编辑了问题,使它更接近解决方案。让信息更加聚焦、减少分散对每个人都有好处。请不要因为我关闭了这个问题而认为是针对你个人的。 - Michael
我并没有把任何事情当成个人问题,我在发布这个问题之前看到了它,但是它已经过于主观化,让我一点线索都找不到,也就是说:这根本不可能。 - Vinz243
显示剩余2条评论
2个回答

6

从 Kotlin 1.3 开始,不需要:

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


行为有改变吗?链接的重复似乎表明这是可能的。 - Michael
重复的问题(以及zsmb13的答案)似乎表明可以通过在Kotlin侧定义包装器来完成,但是没有办法仅通过Java代码将方法声明为中缀。 - Joe Clay
你加粗的那一部分会与此相矛盾。如果你定义一个包装器,使用中缀调用语法调用Java方法是被允许的。在Java代码中标记Java方法为中缀是不可能的(虽然我愿意接受这一点,但我不认为他们无法使用注解来实现相同的功能)。 - Michael
一个@infix注解会很好...可惜他们没有这样做。 - Vinz243

3
您可以添加一个“infix”扩展来从Kotlin获取该语法:
infix fun Foo.doFoo(bar: String) {
    return doFoo(bar)
}

这看起来是一个有趣的方法,但它没有维护文档。 - Vinz243

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接