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

 Mr_cool 发布于 2023-01-29 11:19

我有一个类需要写入文件以与一些传统的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)
  }
}

小智.. 13

你试过这个:

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

请参阅UUID javadoc,以及UUID的唯一性如何?讨论独特性保证.

2 个回答
  • 给文件一个唯一的名称是个好主意

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

    你可以使用File.createTempFile:

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

    Vladimir Matveev 提到 Java 7及更高版本中有一个更好的解决方案 - Paths.createTempFile:

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

    2023-01-29 11:21 回答
  • 你试过这个:

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

    请参阅UUID javadoc,以及UUID的唯一性如何?讨论独特性保证.

    2023-01-29 11:21 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有