我试着了解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
答案 0 :(得分:4)
很抱歉,但我的印象是你需要先得到一些scala基础,什么是特质,什么是伴侣对象以及其他东西。
回到你的问题。
如果要同时执行某些操作,可以将其包装在Future
中。您的代码有一些输出类型(SomeType
,可能是Unit
- 相当于void
),在换入Future
后,您将获得Future[SomeType]
- 它是扩展名特质Future[+T]
。比你需要一些执行上下文(线程池)来执行你的Future
。
尝试查找并阅读Martin Odersky,Lex Spoon和Bill Venners撰写的“Scala编程”,非常适合初学者。
答案 1 :(得分:1)
与集合(List
,Array
等)类似,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
。在这种情况下,伴侣对象可以帮助您分离关注点。