Scala 2.12.10导入scala.util.Failure/Success报错求助
导入scala.util.Failure/Success失败的问题排查与解决
环境信息
- Scala版本:2.12.10
- Spark版本:3.1.1
问题现象
尝试导入scala.util.Failure和scala.util.Success时失败,尽管这两个类在Scala 2.12.2及以上版本已存在。报错提示如下:
<console>:40: error: value util is not a member of String import scala.util.Failure ^ <console>:41: error: value util is not a member of String import scala.util.Success ^ <console>:55: error: not found: value Success case Success(ApiResponse(code, content, headers)) => ^ <console>:60: error: not found: value Failure case Failure(error @ ApiError(code, message, responseContent, cause, headers)) => ^ <console>:67: error: not found: value Failure case Failure(exception) =>
相关代码
import java.util.Map; import fr.ecoemploi.application.etude.swagger.invoker._ import fr.ecoemploi.application.etude.swagger.model.Commune; import fr.ecoemploi.application.etude.swagger.api.CogControllerApi; import fr.ecoemploi.application.etude.swagger.invoker.CollectionFormats._ import fr.ecoemploi.application.etude.swagger.invoker.ApiKeyLocations._ import akka.actor.ActorSystem import akka.stream.ActorMaterializer implicit val system = ActorSystem("system") implicit val executionContext = system.dispatcher implicit val materializer: ActorMaterializer = ActorMaterializer() import scala.util.Failure import scala.util.Success //import scala.concurrent.ExecutionContext.Implicits.global //import scala.concurrent.Future val apiInvoker = ApiInvoker() val cogService = CogControllerApi("http://localhost:9090") val request = cogService.obtenirCommunes(2022); val response = apiInvoker.execute(request) response.onComplete { case Success(ApiResponse(code, content, headers)) => System.out.println(s"Status code: $code}") System.out.println(s"Response headers: ${headers.mkString(", ")}") System.out.println(s"Response body: $content") case Failure(error @ ApiError(code, message, responseContent, cause, headers)) => System.err.println("Exception when calling CogControllerApi#obtenirCommunes") System.err.println(s"Status code: $code}") System.err.println(s"Reason: $responseContent") //System.err.println(s"Response headers: ${headers.mkString(", ")}") error.printStackTrace(); case Failure(exception) => System.err.println("Exception when calling CogControllerApi#obtenirCommunes") exception.printStackTrace(); }
问题原因与解决方案
原因
报错提示value util is not a member of String说明当前作用域中存在一个名为scala的String变量,覆盖了Scala语言的根包名scala。从你提供的环境信息代码可以看到:
scala: String = 2.12.10 spark: String = 3.1.1
这个变量定义导致后续代码中scala.util被解析为访问该String变量的util属性,而String类并没有util成员,因此抛出错误。
解决方案
- 重命名冲突变量:将名为
scala的变量改为其他名称,比如scalaVersion,彻底避免与根包名的命名冲突。 - 重启REPL会话:如果是在Scala REPL中运行代码,关闭当前会话并重新启动,不要先定义
scala变量再执行导入操作。 - 调整代码顺序:如果必须保留该变量,确保
import scala.util.{Failure, Success}语句在变量定义之前执行,这样导入时scala还未被覆盖为String变量。
内容的提问来源于stack exchange,提问作者Marc Le Bihan
相关产品推荐
相关产品推荐

