Sự khác biệt và giống nhau giữa các đặc điểm Scala so với giao diện Java 8 là gì?


84

Tôi là người mới đến Scala bắt đầu học ngôn ngữ này cho vui và tôi vẫn đang cố gắng tìm hiểu nó. Sự hiểu biết của tôi về các đặc điểm Scala là chúng giống như các giao diện java ngoại trừ một số phương thức có thể có một triển khai.

Java 8 đang thêm các giao diện có thể có các phương thức mặc định, nơi có thể cung cấp một triển khai.

Điểm giống và khác nhau giữa giao diện Java 8 và đặc điểm Scala là gì?


4
hãy xem trang web đó, nó có thể giúp bạn infoq.com/articles/java-8-vs-scala
akki0996

3
tl; dr: Động lực chính cho các phương thức mở rộng ảo [phương thức mặc định] là sự phát triển API. Một tác dụng phụ đáng hoan nghênh là họ cung cấp một dạng đa thừa kế, hạn chế về hành vi. Các đặc điểm trong Scala không chỉ cung cấp tính kế thừa của hành vi mà còn của trạng thái. Bên cạnh sự kế thừa trạng thái và hành vi, các đặc tuyến cung cấp một phương tiện để có được một tham chiếu đến lớp triển khai ... Các đặc điểm [Scala] cung cấp một bộ tính năng phong phú hơn các phương thức mở rộng ảo của [Java 8].
Brice Roncace

Câu trả lời:


46

Động lực cho các phương thức mặc định của Java 8 'các đặc điểm Scala khác nhau.

Cái trước đây đã được giới thiệu để hỗ trợ sự phát triển API an toàn và một dạng đa kế thừa hạn chế. Với việc tận dụng các thành ngữ lập trình chức năng trong Project Lambda, ví dụ như thêm một forEach(lambda)phương pháp để java.util.Collectiongiao diện mà không làm thay đổi tất cả các trình triển khai có thể sẽ rất hữu ích (điều này thực sự không thể làm được nếu không phá vỡ tính tương thích ngược). Như một tác dụng phụ, điều này cũng cung cấp một dạng chế phẩm mixin .

Các đặc điểm Scala được thiết kế từ đầu như các khối xây dựng cho thành phần các thành phần mô-đun. Chúng thân thiện với đa thừa kế và không gặp vấn đề về kim cương do có các quy tắc nghiêm ngặt về thứ tự đánh giá của các kết hợp do tuyến tính hóa. Chúng cũng hỗ trợ trạng thái, có thể tham chiếu lớp triển khai và đặt các hạn chế về loại nào có thể kết hợp chúng. Nhìn vào thư viện bộ sưu tập Scala nơi các đặc điểm được sử dụng triệt để.


Bạn có thể nói rõ hơn về điều này "Các đặc điểm Scala được thiết kế từ đầu như các khối xây dựng cho thành phần cấu thành mô-đun." ?
Adelin

14

Lưu ý rằng với scala 2.12.0 RC1 (tháng 9 năm 2016) , Traitbây giờ được biên dịch thành một giao diện.
Scala 2.12 là tất cả về việc sử dụng tối ưu các tính năng mới của Java 8

Với Java 8 cho phép các phương thức cụ thể trong giao diện, Scala 2.12 có thể biên dịch một đặc điểm thành một giao diện duy nhất.

Trước đây, một đặc điểm được biểu diễn như một lớp chứa các triển khai phương thức và một giao diện .
Lưu ý rằng trình biên dịch vẫn còn khá nhiều điều kỳ diệu để thực hiện phía sau hậu trường, vì vậy cần phải cẩn thận nếu một đặc điểm nào đó được thực hiện trong Java.
(Tóm lại, nếu một đặc điểm thực hiện bất kỳ lớp con nào sau đây của nó yêu cầu mã tổng hợp: xác định trường, gọi siêu đặc điểm, câu lệnh khởi tạo trong phần thân, mở rộng một lớp, dựa vào tuyến tính hóa để tìm triển khai ở siêu đặc điểm phù hợp.)

Xem thêm scala PR 5003 về sự khác biệt của việc triển khai.


4

Về điểm giống nhau, cả hai đều có thể có các phương thức mặc định,

Mặt khác biệt, Chúng ta có thể thêm các đặc điểm vào chỉ cá thể chứ không phải cho toàn bộ lớp. Thí dụ:

trait A { def m = ??? }
class B 

new B() with A 

Giống như khôn ngoan, chúng ta có thể tiếp tục thêm các lớp đặc điểm trên một cá thể.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.