Tôi có một số mã Scala sử dụng các loại hiện có mà tôi đang nâng cấp lên 2,10 và tôi nhận thấy cảnh báo về việc thêm "import language.existentials" khiến tôi nghĩ nên có cách viết tốt hơn điều này. Mã Tôi có nắm tới:Thay thế thành ngữ cho các loại tồn tại
class A {
private var values = Set.empty[(Class[_], String)]
def add(klass: Class[_], id: String) {
val key = (klass, id)
if (!values(key)) {
values += key
// More logic below..
}
}
tôi nhận được cảnh báo này:
[warn] test.scala:4 inferred existential type (Class[_$2], String) forSome { type _$2 }, which cannot be expressed by wildcards, should be enabled
[warn] by making the implicit value language.existentials visible.
[warn] This can be achieved by adding the import clause 'import language.existentials'
[warn] or by setting the compiler option -language:existentials.
[warn] See the Scala docs for value scala.language.existentials for a discussion
[warn] why the feature should be explicitly enabled.
[warn] val key = (klass, id)
Có cách nào tôi có thể viết lại mã của tôi không tạo ra cảnh báo này (hoặc yêu cầu nhập khẩu), hoặc là cách thành ngữ nhất để thể hiện nó là gì? Tôi không bao giờ hỏi về tham số kiểu của Class ở bất kỳ đâu trong mã.
xin lỗi, tôi không hiểu điểm. Tại sao loại suy đoán nguy hiểm hoặc không mong muốn? Tham số trên Class không quan trọng, nó hầu như không bao giờ thực hiện khi bạn phải đối phó với các lớp và sự phản chiếu (vì nó bị xóa và do đó vô giá trị tại thời điểm bạn buộc phải kiểm tra hoặc sử dụng thông tin lớp). Tại sao chúng ta buộc phải viết một tuyên bố kiểu thừa cho một cái gì đó rõ ràng và đơn giản như là chìa khóa trong trường hợp này. Có * là * một loại khai báo một dòng ở trên, vậy đâu là vấn đề? – Ichthyo
hãy để tôi làm rõ: Tôi biết rằng bạn có thể xây dựng các công cụ rất phức tạp và khó hiểu với cú pháp đầy đủ cho các loại tồn tại. Nhưng trong trường hợp này ở đây, đâu là vấn đề hay nguy hiểm? 'Lớp [_]' có vẻ đầy đủ – Ichthyo
@ Ichthyo có thể đúng với Lớp, nhưng một Danh sách tồn tại không gần như hữu ích, ví dụ. Tham số kiểu trên Class hầu hết là vô ích, đó là lý do tại sao sự tồn tại với nó không phải là một vấn đề lớn. –