2017-07-27 5 views
0

このメソッドを実装する最良の方法は何ですか?私はこの値の出力を下のメソッドから取得し、それをケースクラスに割り当てようとしています。 OOPプラクティスでは少し錆びついている。メソッドから生成されたUUID(ランダム一意識別子)を実装しようとしています

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

基本的に私の質問上記のケースクラスの車に以下のrand値のインスタンスを作成する最良の方法は何ですか?別のクラスを作成し、同じスカラークラスで呼び出すか、実装しますか?

def rand = new Random() 

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

を、あなたは作成について話していますランダム 'UUID'? –

+0

@ YuvalItzchakovはい、それからint caseクラスの車でUUIDに割り当てられました –

+2

'java.util.UUID.randomUUID'は行く方法です。 –

答えて

1

このコードを整理する1つの方法は、コンパニオンオブジェクトを定義することです:

object Car { 
    def rand = new Random() 

    def randomClockSeqAndNodeFields = { ... } 
} 

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

あなたのメソッドを呼び出すことができますあなたのcaseクラスの宣言の中で、そのメソッドは、デフォルトで、そのクラスのすべてのインスタンスに対して呼び出されます。標準の命名規則に従うようにクラス名を大文字にしました。typeがキーワードであるため、typemakeに変更しました。

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

すべてのCarインスタンスの作成を、明示的に、UUIDパラメータの値を渡していないrandomClockSeqAndNodeFieldsを呼び出します、その車のための新しいUUIDを生成する場合:Carインスタンスを作成するには

。また、あなたが明示的randomClockSeqAndNodeFieldsインスタンスを作成するたびに呼び出す必要があるだろう。その場合には...

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

...としてCarを定義することができます。

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

私はUUIDは、Javaサポートされているタイプであるため、お勧め:

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