Scala 尝试实现从方法生成的UUID(随机唯一标识符)

Scala 尝试实现从方法生成的UUID(随机唯一标识符),scala,Scala,scala新手,实现此方法的最佳方法是什么。我试图从下面的方法中获得这个值输出,并将其分配给一个case类。对OOP实践有点生疏 /** A container for storing car table fields */ case class car( UUID?? color:String, model:String, type:String, ) 基本上,我的问题是,为上面的car案例类创建低于rand值的实例的最佳方法是什么。在同一个scala类中创建另一个类并调用它或实现 de

scala新手,实现此方法的最佳方法是什么。我试图从下面的方法中获得这个值输出,并将其分配给一个case类。对OOP实践有点生疏

/** A container for storing car table fields */
case class car(
UUID??
color:String,
model:String,
type:String,
)
基本上,我的问题是,为上面的car案例类创建低于rand值的实例的最佳方法是什么。在同一个scala类中创建另一个类并调用它或实现

  def rand = new Random()

def randomClockSeqAndNodeFields = {
var lsb: Long = 0
lsb |= 0x8000000000000000L // variant (2 bits)
lsb |= ( rand.synchronized { rand.nextLong } & 0x3FFFFFFFFFFFFFFFL)
lsb
}

我建议,因为UUID是java支持的类型:

/** A container for storing car table fields */
case class car(
uuid: UUID = UUID.randomUUID(),
color:String,
model:String,
type:String,
)

我建议,因为UUID是java支持的类型:

/** A container for storing car table fields */
case class car(
uuid: UUID = UUID.randomUUID(),
color:String,
model:String,
type:String,
)

组织此代码的一种方法是定义一个伴随对象:

object Car {
  def rand = new Random()

  def randomClockSeqAndNodeFields = { ... }
}

case class Car(
  UUID: Long = Car.randomClockSeqAndNodeFields,
  color: String,
  model: String,
  make: String
)
您可以在case类的声明中调用您的方法,默认情况下,该方法将为该类的每个实例调用。注意,我将类名大写以遵循标准命名约定,并将
type
重命名为
make
,因为
type
是一个关键字

要创建
Car
实例:

val myCar = Car(color="black", model="wrangler", make="jeep")
val myCar = Car(Car.randomClockSeqAndNodeFields, "black", "wrangler", "jeep")
如果没有显式地为
UUID
参数传递值,则创建每个
Car
实例将调用
randomClockSeqAndNodeFields
,为该Car生成一个新的UUID。或者,您可以将
Car
定义为

case class Car(
  UUID: Long,
  color: String,
  model: String,
  make: String
)
…在这种情况下,每次创建实例时都必须显式调用
RandomClockSeq和NodeFields

val myCar = Car(color="black", model="wrangler", make="jeep")
val myCar = Car(Car.randomClockSeqAndNodeFields, "black", "wrangler", "jeep")

组织此代码的一种方法是定义一个伴随对象:

object Car {
  def rand = new Random()

  def randomClockSeqAndNodeFields = { ... }
}

case class Car(
  UUID: Long = Car.randomClockSeqAndNodeFields,
  color: String,
  model: String,
  make: String
)
您可以在case类的声明中调用您的方法,默认情况下,该方法将为该类的每个实例调用。注意,我将类名大写以遵循标准命名约定,并将
type
重命名为
make
,因为
type
是一个关键字

要创建
Car
实例:

val myCar = Car(color="black", model="wrangler", make="jeep")
val myCar = Car(Car.randomClockSeqAndNodeFields, "black", "wrangler", "jeep")
如果没有显式地为
UUID
参数传递值,则创建每个
Car
实例将调用
randomClockSeqAndNodeFields
,为该Car生成一个新的UUID。或者,您可以将
Car
定义为

case class Car(
  UUID: Long,
  color: String,
  model: String,
  make: String
)
…在这种情况下,每次创建实例时都必须显式调用
RandomClockSeq和NodeFields

val myCar = Car(color="black", model="wrangler", make="jeep")
val myCar = Car(Car.randomClockSeqAndNodeFields, "black", "wrangler", "jeep")

你是说要创建一个随机的
UUID
?@YuvalItzchakov是的,然后用int case类car
java.util.UUID.randomUUID
。你是说创建一个随机的
UUID
?@YuvalItzchakov是的,然后用int case类将它分配给UUID吗car
java.util.UUID.randomUUID
是一条出路。