2012-11-12 23 views
16

Sau khi chuyển sang Scala 2.10 tôi nhận được tấn cảnh báo:"Truy cập phản xạ của phương pháp thành viên kiểu cấu trúc nên được kích hoạt ..." cảnh báo có nghĩa là gì trong Scala?

truy cập phản ánh phương pháp loại thành viên cấu trúc ... nên được kích hoạt bằng cách làm cho language.reflectiveCalls giá trị tiềm ẩn có thể nhìn thấy

gì nó nghĩa là?

+2

Tôi nghĩ rằng đó là một kết quả của SIP này https://docs.google.com/document/d/1nlkvpoIRkx7at1qJEZafJwthZ3GeIklTFhqmXMvTX9Q/chỉnh sửa – Noah

Trả lời

16

Cảnh báo thực sự nói nơi để tìm trong các tài liệu cho một lời giải thích:

Test.scala:9: warning: reflective access of structural type member method y should be enabled 
by making the implicit value language.reflectiveCalls visible. 
This can be achieved by adding the import clause 'import scala.language.reflectiveCalls' 
or by setting the compiler option -language:reflectiveCalls. 
See the Scala docs for value scala.language.reflectiveCalls for a discussion 
why the feature should be explicitly enabled. 

Referenced Scaladoc entry (hãy chắc chắn nhấp vào |> mũi tên sang trái để mở rộng mục tài liệu).

+0

Điều bí ẩn đối với tôi là tại sao mã của tôi cần điều này, nó khá bình thường. – Ivan

+3

Sẽ hữu ích nếu bạn có thể đăng một số đoạn mã của bạn –

+0

Nó sẽ là quá nhiều để đăng (tôi sẽ cố gắng để cô lập nguyên nhân trong một đoạn mã mô hình). Tôi nghĩ rằng mã gây ra điều này là một thực hiện mẫu "pimp my library" đơn giản. Chỉ cần tự hỏi nếu nó có thể được thực hiện mà không "truy cập phản chiếu" ... – Ivan

0

Từ Scala Documents:

Tại sao kiểm soát nó? Phản ánh không khả dụng trên tất cả các nền tảng. Các công cụ phổ biến như ProGuard gặp sự cố khi xử lý. Ngay cả khi phản xạ có sẵn, công văn phản xạ có thể dẫn đến suy giảm hiệu suất đáng ngạc nhiên.

Hãy suy nghĩ về mã này có sử dụng một lớp con nặc danh:

class Student(val id:Int) 
val specialStudent = new Student(0) { 
    val greeting = "I am a special student with id " + id // Warning: id can be obfuscated 
} 

Link to Scala Docs

Các vấn đề liên quan