Trình biên dịch biết nhiều thông tin về các kiểu hơn thời gian chạy JVM có thể dễ dàng biểu diễn. Bản kê khai là cách để trình biên dịch gửi thông điệp liên chiều tới mã trong thời gian chạy về thông tin loại đã bị mất.
Điều này tương tự như cách người Klepton đã để lại những thông điệp được mã hóa trong hồ sơ hóa thạch và DNA "rác" của con người. Do những hạn chế của trường cộng hưởng ánh sáng và lực hấp dẫn, chúng không thể giao tiếp trực tiếp. Nhưng, nếu bạn biết cách điều chỉnh tín hiệu của họ, bạn có thể hưởng lợi theo những cách mà bạn không thể tưởng tượng được, từ việc quyết định ăn gì cho bữa trưa hoặc số lotto nào để chơi.
Không rõ liệu Bản kê khai có lợi cho những lỗi bạn đang gặp mà không biết thêm chi tiết hay không.
Một cách sử dụng phổ biến của Biểu hiện là để mã của bạn hoạt động khác nhau dựa trên loại tĩnh của bộ sưu tập. Ví dụ: nếu bạn muốn đối xử với Danh sách [Chuỗi] khác với các loại Danh sách khác:
def foo[T](x: List[T])(implicit m: Manifest[T]) = {
if (m <:< manifest[String])
println("Hey, this list is full of strings")
else
println("Non-stringy list")
}
foo(List("one", "two")) // Hey, this list is full of strings
foo(List(1, 2)) // Non-stringy list
foo(List("one", 2)) // Non-stringy list
Một giải pháp dựa trên phản ánh cho điều này có thể sẽ liên quan đến việc kiểm tra từng yếu tố của danh sách.
Một bối cảnh bị ràng buộc có vẻ phù hợp nhất với việc sử dụng các loại lớp trong scala và được giải thích rõ ở đây bởi Debasish Ghosh:
http://debasishg.blogspot.com/2010/06/scala-implicits-type-classes-here-i.html
Giới hạn bối cảnh cũng có thể làm cho chữ ký phương thức dễ đọc hơn. Ví dụ, hàm trên có thể được viết lại bằng cách sử dụng giới hạn ngữ cảnh như vậy:
def foo[T: Manifest](x: List[T]) = {
if (manifest[T] <:< manifest[String])
println("Hey, this list is full of strings")
else
println("Non-stringy list")
}