如何在Scala中为类实例生成唯一ID?

时间:2014-02-05 14:16:21

标签: scala

我有一个类需要写入文件以与一些传统的C ++应用程序进行交互。 由于它将以并发方式多次实例化, 给文件一个唯一的名称是个好主意。

我可以使用System.currentTimemili或hashcode,但是存在冲突的可能性。 另一种解决方案是在伴随对象中放置var字段。

作为一个例子,下面的代码显示了一个带有最后一个解决方案的类,但我不确定它是最好的方法(至少它似乎是线程安全的):

case class Test(id:Int, data: Seq[Double]) {
    //several methods writing files...
}

object Test {
  var counter = 0

  def new_Test(data: Seq[Double]) = {
    counter += 1
    new Test(counter, data)
  }
}

2 个答案:

答案 0 :(得分:10)

你试过这个:

def uuid = java.util.UUID.randomUUID.toString

有关唯一性保证的讨论,请参阅UUID javadoc和How unique is UUID?

答案 1 :(得分:6)

  

为文件提供唯一名称

是个好主意

由于你想要的只是一个文件,而不是id,最好的解决方案是创建一个具有唯一名称的文件,而不是具有唯一id的类。

您可以使用File.createTempFile

val uniqFile = File.createTempFile("myFile", ".txt", "/home/user/my_dir")

Vladimir Matveev mentioned在Java 7及更高版本中有更好的解决方案 - Paths.createTempFile

val uniqPath = Paths.createTempFile(Paths.get("/home/user/my_dir"), "myFile", ".txt"),