2017-01-20 7 views
0
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_102). 
Type in expressions for evaluation. Or try :help. 

scala> Thread.currentThread.sleep(1000) 
<console>:12: error: value sleep is not a member of Thread 
    Thread.currentThread.sleep(1000) 
         ^

scala> 

Huh?.sleepはスレッドのメンバーではありませんか?

scala> Thread.currentThread.getClass.getMethods.filter(_.getName == "sleep").last.invoke(Thread.currentThread, new java.lang.Long(1000)) 

res2: Object = null // after a second-long delay. Duh 

何が得られますか?

答えて

4

Thread.sleep()は静的メソッドです。

はこれを試してみてください:

Thread.sleep(1000) 

が、これは、Javaクラスである点に注意してください。 Javaでは、動作は少し異なります。静的メソッドとインスタンスメソッドがあります。静的メソッドはインスタンスには属しません。含まれているオブジェクトなしで呼び出すことができます。

+0

愚かな瞬間: – Dima

+1

''%d ".format(1)'は実際には素晴らしい(スカラではなくJavaでは)ので、 "静的メソッドはインスタンスに属していない"正しい。 スカラーは静的メソッド呼び出しを、最初の引数としてメソッドにlhsを渡したいのと同じように解釈するので、 '"%d ".format(1)'は '' String.format( "%d" 1) 'と動作し、' thread.sleep(1000) 'は' Thread.sleep(thread、1000) 'になり、(もちろん)失敗します。 – Dima

+2

@Dima '"%d ".format(1)'は '' String.format( "%d"、1) 'に変換されません。暗黙の変換によって 'new StringOps("%d ")。format(1)'に変換されます。 'thread.sleep(1000)'は何にも変換されませんが、インスタンスメソッド 'sleep'がなく、暗黙的に何かに変換されていないので失敗します。 「静的メソッドはインスタンスに属していません」というステートメントは正しいです。 –

関連する問題