2016-01-08 20 views
5

Giao diện Property được thêm bởi JavaFX có thông số kiểu T, là loại giá trị được bao quanh bởi thuộc tính.Tại sao IntegerProperty triển khai Thuộc tính <Number> và không phải Thuộc tính <Integer>?

Trong số các triển khai của giao diện Property, có một số cho số: IntegerProperty, FloatProperty, v.v ... Tất cả các lớp này thực hiện Property<Number>.

Ví dụ: IntegerProperty. Lý do tại sao nó thực hiện Property<Number> và không Property<Integer> như tôi đã mong đợi là gì?


Dưới đây là một sơ đồ UML mà làm rõ hệ thống phân cấp của IntegerProperty:

enter image description here

+0

Tôi có cảm giác déjà vu kỳ lạ nhất. Bạn đã hỏi câu hỏi này chưa? – Kayaman

+1

@Kayaman Không, chưa từng hỏi trước đây. Tôi cũng đã cố hết sức để kiểm tra xem có người nào khác đã làm không. –

+2

Có thể được thực hiện như thế để dễ ràng buộc các thuộc tính số. Xem http://stackoverflow.com/q/28179293/1288408 –

Trả lời

5

Như đã đề cập trong phần ý kiến ​​của một báo cáo lỗi Java (DoubleProperty has unexpected generics type),

thiết kế này được thiết kế. Nó giữ số lượng các phương thức cần thiết nhỏ hơn đáng kể.


Trong ý kiến ​​của câu trả lời này, James_D khiến tôi nhận thức của một báo cáo lỗi sau adressing rằng vấn đề, ChangeListener cannot be added to SimpleIntegerProperty). Nhận xét

Chúng tôi quyết định không thay đổi các đặc tính của các loại nguyên thủy (từ Số thành loại cụ thể) do các vấn đề tương thích ngược. Tuy nhiên, điều đó có nghĩa là vấn đề này không thể sửa được.

cho thấy nhóm nghiên cứu đã xem xét thay đổi thiết kế nhưng đã quá muộn.

+3

Tôi phải đồng ý với nhận xét đó bởi Randahl Isaksen: "Tuy nhiên, với tôi điều này có vẻ là một sử dụng không đúng các generics. Các nhà phát triển Java đã từng Generics hy vọng rằng một FruitCrate sử dụng Generics là một Crate không phải là một Crate . Toàn bộ mục đích của việc sử dụng Generics là đảm bảo tính an toàn kiểu thời gian biên dịch và ít đúc hơn. Tôi biết rằng thiết kế này có thể đơn giản hóa API của bạn trong nội bộ, nhưng bên ngoài, điều này làm giảm chất lượng của API JavaFX. " – Itai

+3

Trong các nhận xét sau này từ nhóm phát triển JavaFX (xem ví dụ: http://mail.openjdk.java.net/pipermail/openjfx-dev/2014-F/02/012739.html), bạn bắt đầu thấy các tham chiếu đến "chúng tôi đã cố gắng khắc phục nhưng điều này đã quá muộn ", điều này gợi ý với tôi rằng mặc dù nó có thể đã được dự định, nhưng đó là một sai lầm. Có các giải pháp khác không liên quan đến việc bùng nổ tổ hợp API, ví dụ: 'lớp trừu tượng công khai NumberProperty triển khai Thuộc tính ' và 'lớp công khai IntegerProperty mở rộng NumerProperty ', như đã được đề xuất bởi một số người. –

0

Tôi muốn nói rằng họ sử dụng Number, vì vậy bạn có thể sử dụng những lớp học với AtomicIntegerBigInteger vv như tốt.

Như xa như tôi có thể nói, chỉ "thật" khác biệt giữa DoublePropertyIntegerProperty là phương pháp setValue(Number v) - một sử dụng v.doubleValue(), khác v.intValue().

Tôi không có môi trường javafx hoạt động ở đây, vì vậy tôi không thể kiểm tra, nếu sử dụng IntegerProperty với Double sẽ ném một ngoại lệ.

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