scala.concurrent.Future的类型是什么?

时间:2018-02-10 05:46:55

标签: scala

我试着了解scala.concurrent.Future的数据类型是什么?

我在scala lang文档中找到了以下类型,但仍然不确定它们之间的区别,以及何时使用哪一个?

trait Future[+T] extends Awaitable[T] //for concurrent programming
object Future extends AnyRef //not sure?

http://www.scala-lang.org/api/2.9.3/scala/concurrent/Future.html
http://www.scala-lang.org/api/2.9.3/scala/concurrent/Future$.html

4 个答案:

答案 0 :(得分:4)

很抱歉,但我的印象是你需要先得到一些scala基础,什么是特质,什么是伴侣对象以及其他东西。

回到你的问题。 如果要同时执行某些操作,可以将其包装在Future中。您的代码有一些输出类型(SomeType,可能是Unit - 相当于void),在换入Future后,您将获得Future[SomeType] - 它是扩展名特质Future[+T]。比你需要一些执行上下文(线程池)来执行你的Future

尝试查找并阅读Martin Odersky,Lex Spoon和Bill Venners撰写的“Scala编程”,非常适合初学者。

答案 1 :(得分:1)

与集合(ListArray等)类似,Future是一种适用于其他类型的类型。有用的比较是Option类型。

正如Option[Int] 可能Int值(可能不是),Future[Int]可能不是Int尚未。可能是Int值仍在计算中,或从数据库表中提取,或从远程网络位置检索。无论原因是什么,如果这是一个缓慢的过程,就没有理由等待它。将其变为Future[Int],以便您的程序可以继续执行其他重要任务。

对于object Future,这是一个单例对象,它有一些处理/操作现有Future元素的方法。 Future.sequence()是一个有用的例子。

答案 2 :(得分:0)

目前还不清楚您是在谈论特质 Future还是单身对象Future。我会回答这两个问题。

特质没有类型。 是一种类型。

所有单件对象foo都具有单件类型foo.type,因此单件对象Future具有单件类型Future.type

答案 3 :(得分:0)

在Scala中,object是一个单例类,这意味着在应用程序的运行时期间只存在一个实例。在大多数语言中有几种方法可以实现单例,但大多数情况下,您会冒一些问题,例如线程安全。 Scala的object负责为您实现此模式。

Scala中的一个常见模式是创建一个与object同名的class,就像您示例中的那个一样。这称为伴侣对象。这些的常见用途是基本上从Java定义static方法的等价物。您可以声明所有实例共有的方法,或者处理和操作class实例的方法。例如,在Java中,您可以在static本身的主体中将它们声明为class。在这种情况下,伴侣对象可以帮助您分离关注点。