Đối số của bạn không hoàn thiện. Kotlin đã chưa được công bố *, và Ceylon chỉ có phiên bản đầu tiên của nó được phát hành, và tôi sẽ báo giá một trong những điều đó là mất tích từ their announcement:
Như vậy, cho tôi xin lỗi, nhưng gì thực hiện chứng minh điều đó là có thể? Trong thực tế, tôi đã không nhìn nhiều vào những gì Kotlin đang hứa hẹn, nhưng những gì Ceylon là đầy hứa hẹn chỉ là những gì biểu hiện đã cung cấp, nhưng một cách minh bạch.
Nhưng chúng ta hãy xem xét các vấn đề bạn mô tả trong câu hỏi của bạn:
trait Handles[E <: Event] {
def handle(event: E)
}
Vì vậy, trước hết, JVM không cung cấp bất kỳ cách nào xác định các tham số gõ vào giao diện hoặc các lớp học, vì vậy E
không thể được được JVM kiểm tra. Bạn có thể, tuy nhiên, lưu trữ thông tin về những gì E
là viết tắt của từng đối tượng mà thực hiện Handles
, giống như bạn có thể viết những dòng này trong Scala:
abstract class Handles[E <: Event : Manifest] {
def handle(event: E)
}
Tiếp theo, chúng ta hãy xem các phương pháp handle
. Một lần nữa, JVM không cung cấp cách nào để sử dụng các tham số kiểu trong một định nghĩa phương thức. Cách duy nhất để thực hiện điều đó là để có handle
chấp nhận Object
làm thông số: nghĩa là xóa loại.
Và đây là giao dịch: để thực hiện handle
có thể gọi từ Java, nó phải được xóa. Và, nếu nó là loại bị xóa, thì nó phụ thuộc vào giới hạn được mô tả trong câu hỏi của bạn. Cách duy nhất để vượt qua đó là giảm khả năng tương thích Java (mà, nhân tiện, cũng không có trong bản phát hành đầu tiên của Ceylon).
Có, Scala sẽ có sự cải tổ (một số loại) vào ngày 2.10, theo Martin Odersky. Nhưng bất cứ điều gì nó cung cấp (và tôi cá cược về việc sử dụng các biểu hiện minh bạch hơn để khẳng định sự bình đẳng kiểu), giới hạn cụ thể này là nội tại đối với JVM và không thể khắc phục mà không làm mất tích hợp Java.
(*) Kotlin có bản trình diễn ngay bây giờ và việc cải tổ lại - cho đến nay - chỉ là một đường cú pháp để gói các tệp kê khai và kiểm tra instanceOf. Nó vẫn phải chịu mọi hạn chế giống như Scala.
Tôi đã cố gắng cập nhật câu hỏi để bây giờ hy vọng sẽ đơn giản hơn để trả lời r (như trong Có/Không, bạn không thể thực hiện một đặc điểm chung trong nhiều lần trong Scala 2.10 vì việc sửa đổi kiểu sẽ yêu cầu mang tên trong các lớp được tạo ra, làm cho chúng phức tạp khi sử dụng trong Java. Hoặc bất kể câu trả lời có thể là gì. –
Odersky * cho biết * việc chỉnh sửa là 2,10, vì vậy nó không chỉ là tin đồn. – Malvolio
Bạn có nghĩa là Kotlin không tồn tại và Ceylon-that-was-just-release-without-reification cho thấy rằng các generics đã được tái hợp là có thể? Nó hoạt động như thế nào? –