如何从Java类调用Scala隐式类方法
我是一名在混合Java/Scala代码库中工作的初级程序员。我在Scala中有一个隐式类,它为第三方依赖项中的类提供扩展。隐式类如下所示:如何从Java类调用Scala隐式类方法,java,scala,scala-java-interop,language-interoperability,Java,Scala,Scala Java Interop,Language Interoperability,我是一名在混合Java/Scala代码库中工作的初级程序员。我在Scala中有一个隐式类,它为第三方依赖项中的类提供扩展。隐式类如下所示: object ThirdPartyClassOps { implicit class ThirdPartyClassOps(val tp: ThirdPartyClass) extends AnyVal { ... def generateKey(): String = { tp.getId + "-" + tp.getOth
object ThirdPartyClassOps {
implicit class ThirdPartyClassOps(val tp: ThirdPartyClass) extends AnyVal {
...
def generateKey(): String = {
tp.getId + "-" + tp.getOtherString
}
}
}
public class MyJavaClass {
...
public static boolean thirdPartyClassIsValid(ThirdPartyClass tp) {
...
// Generate tp key here.
}
}
其中,generateKey
是我感兴趣的方法。我想调用generateKey
的Java类如下:
object ThirdPartyClassOps {
implicit class ThirdPartyClassOps(val tp: ThirdPartyClass) extends AnyVal {
...
def generateKey(): String = {
tp.getId + "-" + tp.getOtherString
}
}
}
public class MyJavaClass {
...
public static boolean thirdPartyClassIsValid(ThirdPartyClass tp) {
...
// Generate tp key here.
}
}
我的初学者对JVM语言的理解表明,我应该可以从Java类中调用generateKey
。搜索答案让我找到了一些例子,比如调用上述Scala方法有一个简单的解决方案。当我尝试使用String myKey=ThirdPartyClassOps.ThirdPartyClassOps(tp.generateKey())调用它时代码>或字符串myKey=ThirdPartyClassOps$.MODULE$.ThirdPartyClassOps(tp.generateKey()代码>根据StackOverflow答案和IntelliJ的自动建议,我在尝试构建时遇到了“错误:找不到符号”错误:
.../MyJavaClass.java:33: error: cannot find symbol
String myKey = ThirdPartyClassOps$.MODULE$.ThirdPartyClassOps(tp).generateKey();
^
symbol: method generateKey()
location: class ThirdPartyClass
考虑到Scala中的隐式类定义,如何在Java类中调用隐式类方法?如果您有一个混合项目,通常建议编写Java接口,并坚持使用该接口进行互操作,请尝试新建ThirdPartyClassOps$.ThirdPartyClassOps(tp).generateKey()。您将失去大部分scala功能,但实际上,如果将其与java混合使用,您已经失去了这些功能。如果您有一个混合项目,并且常见的建议是编写java接口并在互操作中坚持使用它,请尝试new ThirdPartyClassOps$.ThirdPartyClassOps(tp).generateKey()
。您将失去大部分scala特性,但实际上,由于将其与java混合,您已经失去了这些特性。