2017-07-27 2 views
0

Neu bei scala, was ist der beste Weg, diese Methode zu implementieren. Ich versuche, diesen Wert von der folgenden Methode zu erhalten und einer Fallklasse zuzuordnen. Etwas rostig bei den OOP-Praktiken.Der Versuch, eine UUID (zufällige eindeutige Kennung) zu implementieren, die mit einer Methode generiert wurde

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

basicaly meiner Frage, was der beste Weg ist, um eine Instanz des unter rande Wert auf den Fall der Klasse Auto oben zu schaffen. Erstellen Sie eine andere Klasse und nennen Sie sie oder implementieren Sie sie in derselben Scala-Klasse?

def rand = new Random() 

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

Sprechen Sie über eine Schaffung zufällige 'UUID'? –

+0

@YuvalItzchakov ja und dann haben sie UUID zugewiesen mit int Fallklasse Auto –

+2

'java.util.UUID.randomUUID' ist der Weg zu gehen. –

Antwort

1

Eine Möglichkeit, diesen Code zu organisieren ist ein Begleitobjekt zu definieren:

object Car { 
    def rand = new Random() 

    def randomClockSeqAndNodeFields = { ... } 
} 

case class Car(
    UUID: Long = Car.randomClockSeqAndNodeFields, 
    color: String, 
    model: String, 
    make: String 
) 

Sie Ihre Methode aufrufen innerhalb der Deklaration Ihrer Fallklasse, und diese Methode wird standardmäßig für jede Instanz der Klasse aufgerufen. Beachten Sie, dass ich den Klassennamen groß geschrieben habe, um den Standardnamenskonventionen zu folgen, und ich type in make umbenannt habe, weil type ein Schlüsselwort ist.

eine Car Instanz zu erstellen:

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

Die Schaffung eines jeden Car Beispiel, wenn Sie in einem Wert für die UUID Parameter übergeben nicht explizit, wird randomClockSeqAndNodeFields nennen, eine neue UUID für das Auto zu erzeugen . Alternativ können Sie Car als ... definieren

case class Car(
    UUID: Long, 
    color: String, 
    model: String, 
    make: String 
) 

... in dem Fall, dass Sie explizit randomClockSeqAndNodeFields haben würde rufen jedes Mal, wenn Sie eine Instanz erstellen:

val myCar = Car(Car.randomClockSeqAndNodeFields, "black", "wrangler", "jeep") 
3

Ich schlage vor, da UUID ein Java-unterstützten Typ ist:

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