2009-04-02 14 views
16

Có lý do hợp lý nào không, tại sao native properties sẽ không là một phần của Java 7?Tại sao sẽ không có thuộc tính gốc trong Java 7?

+3

Đừng đánh giá khả năng của ngôn ngữ theo số lượng tính năng của ngôn ngữ đó. Hãy nghĩ về nền tảng, hệ sinh thái, ... –

+0

đó là một nhận xét phi thường Ivan. Tôi đang học C# và nhiều tính năng tôi gặp phải mà Java thiếu, không hét lên như thể họ sẽ giải quyết các vấn đề khó khăn hơn. Ngoài ra một số chỉ có vẻ như họ có thể mang lại cho mã phức tạp hơn như có nhiều thứ trở lại từ một phương pháp thông qua outs. Hoặc tuyên bố goto khét tiếng. –

Trả lời

15

Làm thuộc tính "đúng" trong Java sẽ không dễ dàng. Công việc của Rémi Forax đặc biệt có giá trị trong việc tìm ra điều này trông như thế nào, và khám phá ra rất nhiều "gotchas" sẽ phải được giải quyết.

Trong khi đó, Java 7 đã mất quá nhiều thời gian. Cuộc tranh luận đóng cửa là một sự phân tâm lớn, gây tranh cãi lãng phí rất nhiều sức mạnh tâm trí có thể được sử dụng để phát triển các tính năng (như tài sản) có sự đồng thuận rộng rãi về hỗ trợ. Cuối cùng, quyết định đã được thực hiện để hạn chế những thay đổi lớn đối với mô đun hóa (Project Jigsaw). Chỉ "thay đổi nhỏ" đang được xem xét cho ngôn ngữ (theo Dự án Coin).

JavaFX có hỗ trợ thuộc tính đẹp, do đó, Sun hiểu rõ giá trị của thuộc tính và biết cách triển khai chúng. Nhưng đã bị hư hỏng bởi các thuộc tính JavaFX, các nhà phát triển ít có khả năng giải quyết cho việc triển khai nửa nướng trong Java. Nếu họ đáng làm, họ đáng làm đúng.

+1

Đối với ít thông tin hơn, bạn có thể giải thích ngắn gọn về khó khăn trong việc thực hiện các thuộc tính đúng cách trong Java không? – Jason

3
  • Không đủ thời gian?
  • Chưa được xác định đúng cách?
  • Khó thêm vào java do triển khai của java?
  • Được coi là không đủ quan trọng, tức là những thứ khác đã được ưu tiên?
18

Có một số lý do cấp cao liên quan đến lịch biểu và tài nguyên của khóa học. Việc thực hiện các thuộc tính và hiểu tất cả các nhánh và các nút giao với các tính năng ngôn ngữ khác là một nhiệm vụ lớn tương tự như kích thước của các thay đổi ngôn ngữ Java 5 khác nhau.

Nhưng tôi nghĩ rằng lý do thực sự Sun không đẩy tính cũng giống như đóng cửa:

1) Không có sự đồng thuận về những gì thực hiện, nếu như thế nào. Hay đúng hơn, có nhiều lựa chọn thay thế cạnh tranh và những người đam mê tài sản không đồng ý về những phần quan trọng của việc thực hiện.

2) Có lẽ quan trọng hơn, có sự thiếu đồng thuận đáng kể về việc liệu tính năng đó có được mong muốn hay không. Trong khi nhiều người muốn tài sản, cũng có nhiều người không nghĩ rằng nó cần thiết hoặc hữu ích (đặc biệt, tôi nghĩ rằng phía máy chủ xem tài sản là ít quan trọng đối với cuộc sống hàng ngày của họ hơn là lập trình viên xoay).

Thuộc tính lịch sử ở đây:

+0

Thú vị. Tôi đã không nhận thức được sự tranh cãi về tài sản, ít nhất không phải là loại đóng cửa căm thù rực lửa đã gây ra. Bạn có thể cung cấp bất kỳ liên kết nào để điền vào nền tảng của ưu và nhược điểm không? Tôi đồng ý về các thuộc tính ít quan trọng hơn phía máy chủ và JavaFX giải quyết nhu cầu trên máy khách. – erickson

+1

Là một người phía máy chủ, thuộc tính là tất cả những gì tôi có. – trunkc

+0

Đã thêm liên kết vào các cuộc thảo luận về sở hữu cũ hơn. Cá nhân, tôi rất mạnh mẽ. Tôi thấy hầu hết các đề xuất không khiến tôi quá phấn khởi. Tôi không chắc Java có thể đi đủ xa để thực sự thỏa mãn như Groovy hay Scala trong bộ phận này không. –

10

Bất kỳ điều đã cho là "không làm" theo mặc định, vì vậy không có lý do đặc biệt cần thiết cho một cái gì đó để duy trì không được thực hiện. Thay vào đó một số lý do thuyết phục là cần thiết để di chuyển một cái gì đó từ "không thực hiện" để "lên kế hoạch" hoặc "thực hiện". Không có lý do đủ thuyết phục nào phát sinh cho tính năng ngôn ngữ này.

5

Có thêm hai lý do để tránh các thuộc tính trong bất kỳ ngôn ngữ:

  • Thuộc tính không phải là rất hướng đối tượng. Làm cho chúng dễ dàng để viết khuyến khích các mô hình mà đối tượng chỉ phục vụ lên trạng thái nội bộ của nó và người gọi thao túng nó.Đối tượng nên cung cấp các phương thức mức cao hơn và giữ riêng cho các phương thức của nó. Lần sau, bạn đang thực hiện một công cụ getter, hãy xem xét người gọi sẽ làm gì với dữ liệu và liệu bạn có thể cung cấp trực tiếp chức năng đó không.

  • Thuộc tính khuyến khích trạng thái có thể thay đổi (thông qua trình cài đặt), làm cho chương trình ít tương thích hơn. Khi số lượng lõi tăng lên, tất cả chúng ta nên cố gắng làm cho các đối tượng của chúng ta không thay đổi được để làm cho lý luận đồng thời dễ dàng hơn. Lần tới, bạn đang thực hiện một setter một cách tẻ nhạt, hãy cân nhắc việc loại bỏ nó và làm cho đối tượng không thay đổi được.

+1

Tôi đối tượng _ "Thuộc tính không phải là rất hướng đối tượng" _. Và những người khác: _ "[" đối tượng ", là cấu trúc dữ liệu chứa dữ liệu, dưới dạng các trường, thường được gọi là thuộc tính và mã, dưới dạng thủ tục, thường được gọi là phương thức.] (Http://en.wikipedia.org/wiki/Object-oriented_programming)"._ Buộc một người dùng một đối tượng (API/class /) bỏ qua một nửa trong số đó những gì nó có theo định nghĩa là không tiện lợi, ít nhất. Đó là cả hai mã không tự nhiên và bloats: 'person.name =" Nimoy ";' so với 'person.setName (" Nimoy ");' và 'name = person.name;' vs. 'name = person.getName(); .' –

+0

Tôi khuyên bạn nên tránh cụm từ "không phải là rất hướng đối tượng" quá (mà là gần như vô nghĩa vào thời điểm này) nhưng giữ cả hai điểm (đó là về thiết kế tốt, đồng bằng và đơn giản). Nếu không, độc giả sẽ tập trung vào định nghĩa cá nhân của riêng họ về OOP và bỏ qua những gì thực sự được nói ở đây. – tne

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