Chapter 10注記
6214 ワード
Chapter 10この節はやはり重要で、Sparkのソースコードを見る過程で、そのソースコードが多くの注釈の知識を使っていることを発見したので、この節は必ずよく勉強しなければなりません.
1.注釈とは注記:ツールが処理できるようにコードに挿入されたラベルです. 注釈の役割:注釈された式、変数、フィールド、メソッド、またはタイプを記述します. Javaでの注釈はコンパイラがバイトコードを生成することに影響しませんが、Scalaでは影響します. 以下は注釈の簡単な例である:
2.何が注釈できるかクラス、メソッド、フィールド、ローカル変数、およびパラメータに注釈を追加できます. は、複数の注釈を追加することができ、前後順はありません. プライマリコンストラクタに注記を追加すると、注記はコンストラクタの前に配置され、カッコのペアが加算されます. 式に注釈を追加するには、式の後にコロンを追加し、注釈を追加する必要があります.
3.注記パラメータ注記にはパラメータを付けることができます. 注記はパラメータを持たず、カッコは省略できます.注記には、TestのTimeoutのデフォルト値が0などのデフォルト値があり、タイムアウトがないことを示し、expectedのデフォルトでは異常は予想されません.
4.Java特性に対する注釈 .
5.タグインタフェース
6.受検異常と変長パラメータ
7.ジャンプテーブル生成とインライン C++とJavaのswitchは通常ジャンプテーブルにコンパイルされ、より効率的であり、
8.省略可能な方法 コンパイルには、次のコマンドが必要です. の具体的なパラメータ表は以下の通りで、デフォルト値が1000未満の方法は省略されます.
9.基本タイプの特殊化タイプパラメータに で使用できるタイプは、Unit、Boolean、Byte、Short、Char、Int、Long、Float、Doubleです.
10.エラーと警告の注釈
【続き】
1.注釈とは
import scala.reflect.BeanProperty
import javax.persistence.Entity
import javax.persistence.Id
import org.junit._
import org.junit.Assert._
@Entity class Credentials {
@Id @BeanProperty var username : String = _
@BeanProperty var password : String = _
}
class MyTest {
@Test(timeout = 100) def testSomeFeature() {
assertTrue(6 * 7 == 42)
}
}
@Entity
注釈はクラスがエンティティであることを識別し、@id
はプライマリ・キーを設定し、@BeanProperty
はChapter 05で述べたように、getterとsetterの2つの方法を生成し、@Test
はテスト方法を示し、ここで所望の異常とタイムアウト時間をテストすることができる.具体的な意味はgoogleでJunitとJPAの注釈を調べることができます.2.何が注釈できるか
@BeanProperty @Id var lastName = ""
class Credentials @Inject() (var username: String, var password: String) {
}
(n: @unchecked) match { ... }
3.注記パラメータ
@Test(timeout = 100, expected = classOf[IOException])
def testNonexistentFile() {
new FileReader("/fred.txt")
}
4.Java特性に対する注釈
@volatile
は、フィールドを揮発性としてマークし、揮発性フィールドを複数のスレッドによって同時に更新することができる.@transient
はフィールドを過渡的とマークし、過渡的なフィールドはシーケンス化されず、一時的なキャッシュデータとしてのみ使用されます.(シーケンス化:オブジェクト状態情報を記憶または伝送可能な形式に変換するプロセス)@strictfp
IEEEのdoubleを使用して浮動小数点計算を行い、80ビット拡張精度を使用するのではなく、計算は遅いが移植性が高い.@native
は、CまたはC++コード中の実装方法をマークする.5.タグインタフェース
@cloneable
および@remote
タグインタフェースは、クローン化されてもよいし、または遠隔地のオブジェクトであってもよい.@SerialVersionUID
シーケンス化バージョンを指定し、シーケンス化可能なクラスをマークします. @cloneable @remote @SerialVersionUID(6157032470129070425L)
class Employee(var name: String, var salary: Double) extends Serializable {
var hireDay = new Date
}
6.受検異常と変長パラメータ
@throws
タグは、異常なオブジェクトを放出する可能性がある.@varargs
JavaからScalaの変長パラメータ付きメソッドを呼び出すことができます. class Processor {
@varargs def process(args: String*) {
println(args.mkString("<", "|", ">"))
}
}
7.ジャンプテーブル生成とインライン
@switch
はScalaがmatchをジャンプテーブルにコンパイルするかどうかをチェックする. (n: @switch) match {
case 0 => "Zero"
case 1 => "One"
case _ => "?"
}
@inline
メソッドをインラインメソッドとしてマークし、@noinline
はコンパイラにインラインしないように伝えます.8.省略可能な方法
@elidable
は、生産コードから削除する必要がある方法にマークを付ける.その後にパラメータが接続されます. @elidable(800) def dump(props: Map[String, String]) {}
scalac -Xelide-below 800 prog.scala
9.基本タイプの特殊化
@specialized
注記を追加すると、コンパイラは自動的に対応するタイプのすべてのメソッドを生成します.自分でリロード関数を書く必要はありません.def allDifferent[@specialized(Double, Long) T](x: T, y: T, z: T) = x != y && x != z && y != z
10.エラーと警告の注釈
@deprecated
注釈が追加されると、コンパイラが注釈されたメソッドの使用に遭遇すると、メッセージとsinceの2つのパラメータを選択可能にする警告が生成されます.@deprecated(message = "Use factorial(n: BigInt) instead")
def factorial(n: Int): Int = if (n <= 0) 1 else n * factorial(n - 1)
@implicitNotFound
注記ある暗黙的なパラメータが存在しない場合に意味のあるエラープロンプトが生成されます.@unchecked
注記は、一致が不完全な場合に警告情報をキャンセルするために使用される.【続き】