gpt4 book ai didi

Scala 选项类型未按预期推断

转载 作者:行者123 更新时间:2023-12-01 00:49:15 26 4
gpt4 key购买 nike

我正在编写一个函数来从 JSONObject 获取条目.由于它是 JSON,输入名称的条目可能存在也可能不存在,因此函数返回 Option这将是 NoneTry失败或值为 NULL关于成功。函数编译失败,返回类型不正确。

def tryGet[T](jsonObject: JSONObject, name: String): Option[T] = {
Try(jsonObject.get(name))
.map(x => if(JSONObject.NULL.equals(x)) None else x.asInstanceOf[T])
.toOption
}

错误:
Expression of type Option[Any] doesn't conform to expected type Option[T]
有人可以告诉我我在这里做错了什么吗?另外,这是解决问题的惯用方式吗?

更新:

更改为以下作品
def tryGet[T](jsonObject: JSONObject, name: String): Option[T] = {
Try(jsonObject.get(name))
.filter(!JSONObject.NULL.equals(_))
.map(_.asInstanceOf[T])
.toOption
}

最佳答案

问题在于这一行:

.map( x => if(x.equals(null)) None else x.asInstanceOf[T])
This has type `Option[Nothing]` ^ ^ This has type `T`

你有两个 Option[Nothing]T在 if/else 语句中。 if/else 的结果类型是 if 的结果类型的最小上界(最接近的公共(public)类型)结果类型为 else .在这种情况下,它们除了 Any 之外没有任何共同点。 .所以结果是 Try[Any]转换为 Option[Any]通过 toOption .

如果确实需要查看 null , 使用 filter反而。
def tryGet[T](jsonObject: JSONObject, name: String): Option[T] =
Try(jsonObject.get(name))
.map(_.asInstanceOf[T])
.filter(_ != null)
.toOption

关于Scala 选项类型未按预期推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32343266/

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