加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java.util.concurrent.LinkedBlockingQueue put方法在Scala中需要Nothi

发布时间:2020-05-31 07:21:30 所属栏目:Java 来源:互联网
导读:以下是代码片段 – import java.util.concurrent.LinkedBlockingQueue def main(args:Array[String]) { val queue=new LinkedBlockingQueue queue.put(foo) } 这给了我 – 错误:类型不匹配; 发现:java.lang.String(“fo

以下是代码片段 –

import java.util.concurrent.LinkedBlockingQueue  

def main(args:Array[String]) {  
    val queue=new LinkedBlockingQueue  
    queue.put("foo")  
}

这给了我 –

错误:类型不匹配;
发现:java.lang.String(“foo”)
要求:没什么
queue.add( “foo” 的)

我的理解是因为我没有指定进入队列的元素的类型.如果是这种情况,我们如何在Scala中为LinkedBlockingQueue指定类型而不是默认的通用类型?

解决方法

当您不提供类型签名但需要一个时,Scala可能使用最严格的签名.由于Nothing是最严格的(没有什么可以是Nothing!),Scala选择LinkedBlockingQueue [Nothing].

但在这种情况下,限制性意味着您实际上无法将任何内容放入此限制性高的队列中.

正如您已经发现的那样,解决方案是指定集合中的类类型:

val queue = new LinkedBlockingQueue[String]

但请注意,类型推断器可以通过遵循“尽可能限制”规则来确定其他情况下的正确类型.例如,如果initial是另一个类型为包含字符串的Java集合,

val queue = new LinkedBlockingQueue(initial)

会工作,因为它会从最初读取字符串类型.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读