2011-01-21 33 views
13

Tôi có thể thấy một số lợi ích của việc đóng cửa, chẳng hạn như cách họ có thể có vị trí của mình trong việc đơn giản hóa các thư viện hiện có và làm cho một số thiết kế trong tương lai dễ dàng hơn và hiệu quả hơn.Làm thế nào sẽ đóng cửa trong Java cho phép thiết kế API để thay thế thiết kế ngôn ngữ?

Tuy nhiên, một trong những điểm mấu chốt được đề cập trong dự thảo đề nghị (http://www.javac.info/consensus-closures-jsr.html) là trong phần 2.5, điểm e:

(Thông số kỹ thuật sẽ cải thiện ngôn ngữ bằng cách)

e) bật thiết kế API trong tương lai để thay thế thiết kế ngôn ngữ để mở rộng nền tảng Java.

Tôi đang cố gắng xem trường hợp này như thế nào, chắc chắn thiết kế ngôn ngữ chỉ là - thiết kế ngôn ngữ và không thể thay thế bằng API trừ khi Java mở tất cả các API lạ Sử dụng các đóng cửa để sửa đổi ngôn ngữ (mà tôi rất nghi ngờ sẽ xảy ra.)

Có thể ai đó làm sáng tỏ điều này và có thể cung cấp ví dụ về thứ cần thay đổi ngôn ngữ trước đó, nhưng bổ sung đóng cửa, không còn yêu cầu một?

Trả lời

6

Tính năng thiết kế và ngôn ngữ API chắc chắn có thể hoán đổi cho nhau tại một số điểm. Chỉ cần nhìn vào một cái gì đó giống như từ khóa được đồng bộ hóa trong Java. Đó là một từ khóa, nhưng cũng có thể được triển khai như một API nếu ngôn ngữ đó không đầy đủ. Chú thích là một ví dụ khác. Cách khác xung quanh một chú thích @Stateless mà làm cho tất cả các phương thức trong một giao dịch lớp, cũng có thể là một từ khóa ngôn ngữ.

Đóng cửa đặc biệt giúp bạn dễ dàng chuyển "chặn mã" thành một phương thức, sau đó có thể làm điều gì đó với phương pháp đó.

Một ví dụ thô, một cho mỗi thể được thực hiện:

for_each(myFooList, #(Foo foo) { 
    String something = foo.getBar() + foo.getKaz(); 
    System.out.println(something); 
}); 

Có lẽ không phải là 100% càng sạch càng có cho mỗi vòng lặp được hỗ trợ trực tiếp bởi các cú pháp của ngôn ngữ, nhưng nó cho phép mọi người dễ dàng trải nghiệm với các cải tiến giống như ngôn ngữ.

+0

Anh ấy cũng đang xem xét một trong những đề xuất đóng cửa cũ cho java, nơi một trong các mục tiêu là có cú pháp thậm chí còn giống Ruby hơn (tức là ít bản mẫu trong vòng lặp for_each' của bạn hơn so với những gì họ đang thảo luận bây giờ . –

6

Đối với những ai chưa đọc dự thảo đề xuất, đây là một chút chi tiết hơn từ sau trong cùng một tài liệu:

Việc bổ sung đóng cửa đơn giản hoá sự phát triển của nền tảng Java. Nhiều RFE ngôn ngữ hiện có trong cơ sở dữ liệu lỗi công khai của Sun có thể được nhắm mục tiêu lại thành các yêu cầu API cho các phương thức nhận đóng cửa. Nhiều nhu cầu trong tương lai cho các biểu mẫu tuyên bố bổ sung có thể được đáp ứng bằng cách bổ sung các phương thức thư viện.

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