2010-06-18 26 views
23

Tôi vừa mới bắt đầu học Scala và bây giờ tôi tự hỏi làm thế nào tôi có thể thực hiện hai giao diện Java khác nhau với một lớp Scala? Giả sử tôi có các giao diện sau được viết bằng JavaLớp Scala để triển khai hai Giao diện Java - làm cách nào?

public interface EventRecorder { 
    public void abstract record(Event event); 
} 

public interface TransactionCapable { 
    public void abstract commit(); 
} 

Nhưng một lớp Scala chỉ có thể mở rộng một lớp tại một thời điểm. Làm thế nào tôi có thể có một lớp Scala có thể thực hiện cả hai hợp đồng? Tôi có phải lập bản đồ các giao diện đó thành các đặc điểm không?

Lưu ý, các lớp Scala của tôi sẽ được sử dụng từ Java vì tôi đang cố gắng chèn chức năng mới được viết bằng Scala vào một ứng dụng Java hiện có. Và khuôn khổ hiện tại hy vọng rằng cả hai giao diện hợp đồng được hoàn thành.

Trả lời

39

Giao diện thứ hai có thể được thực hiện với từ khóa with

class ImplementingClass extends EventRecorder with TransactionCapable { 
    def record(event: Event) {} 
    def commit() {} 
} 

Tiếp tục trên mỗi giao diện tiếp theo được tách ra với từ khóa with.

class Clazz extends InterfaceA 
    with InterfaceB 
    with InterfaceC { 
    //... 
} 
+0

Cảm ơn! Tôi thực sự đã thử nó nhưng IntelliJ phun ra một số lỗi cú pháp mơ hồ. Tôi phải thử lại lần nữa và xem dự án có được thiết lập không chính xác hay không. – puudeli

+0

Nếu nó được đề cập, các giao diện tiếp theo được tách biệt với từ khóa 'with'? Ví dụ. 'x kéo dài y với z với q'. –

+0

Cảm ơn bạn đã hoàn tất! –

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