gpt4 book ai didi

scala - 为什么嵌套的 Java 类不能从 Scala 导入?

转载 作者:行者123 更新时间:2023-12-04 23:12:44 27 4
gpt4 key购买 nike

我应该如何使用 模拟嵌套的 Java 类蛤蜊 ,尤其是当所说的嵌套 Java 类来自第三方库时?

鉴于以下来源:

src/main/java/Outer.java

/**
* Outer class that offers a Nested class inaccessible from Scala :(
*/
public class Outer {
public class Nested {

}
}

src/main/java/UseNestedJavaClassFromJava.java
public class UseNestedJavaClassFromJava {
private Outer.Nested nested;
}

src/main/scala/ImportNestedJavaClass.scala
// TODO uncomment the below line to break the build
//import Outer.Nested

取消注释 scala 导入行会导致编译失败,同时编译 UseNestedJavaClassFromJava.java 工作正常。

带有 gradle 的完整最小示例: https://github.com/billyjf/async-http-client-gradle-scala .

显然这在下面的问题中已经有所解决,但是仅仅为了测试利用带有嵌套 Java 类的 Java 库的 Scala 代码而诉诸 Java 粘合代码或反射技巧对我来说似乎有点不合理,真的没有其他解决方案吗? ?

Scala can't access Java inner class?

最佳答案

我终于找到了使用 Mockito 的解决方案:

import org.mockito.Mockito
import org.scalamock.scalatest.MockFactory
import org.scalatest.mockito.MockitoSugar
import org.scalatest.{FlatSpec, Matchers}

class OuterNestedTest extends FlatSpec with MockFactory with Matchers with MockitoSugar {
"Nested Java class" should "be mockable using Mockito from within a scalatest" in {
val mockedNestedJavaClass = Mockito.mock(classOf[Outer#Nested])

Mockito.when(mockedNestedJavaClass.methodWithAParam("some value"))
.thenReturn("mocked", Nil: _*)

mockedNestedJavaClass.methodWithAParam("some value") shouldBe "mocked"
}
}

关于scala - 为什么嵌套的 Java 类不能从 Scala 导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52132456/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com