2013-02-28 28 views
5

Tôi đã tự hỏi ai có thể giúp tôi với việc cung cấp các tùy chọn cho cả độ chính xác gấp đôi và nổi cho một lớp học?Chuyên lớp java cho cả độ chính xác kép và nổi

Tôi đang làm việc với Java3D và từ đặc tả API cho Point3d và Point3f, đó là sự hiểu biết của tôi rằng việc thực hiện sao chép hiệu quả lớp Point3f thay thế float bằng đôi khi cần thiết. Có phải vì Generics không thể được sử dụng với các kiểu dữ liệu nguyên thủy? Hiệu quả?

Tôi đang viết một lớp Curve và tôi tự hỏi tôi có nên cung cấp Curved và Curvef theo cách tương tự không. Đây có phải là lựa chọn tốt nhất không?

+1

Xem http://stackoverflow.com/questions/2721546/why-dont-generics-support-primitive-types để biết thông tin liên quan – djechlin

+1

Chỉ viết cả hai nếu bạn sẽ _use_ cả hai. –

+1

Cũng cần phải chỉ ra rằng điều này rõ ràng là tối ưu hóa sớm. Chỉ cần sử dụng gấp đôi. – djechlin

Trả lời

5

Có, thật không may, các Generics Java không hoạt động trên các kiểu nguyên thủy.

Bạn có thể tạo mã mặc dù, sản xuất nhiều tệp java từ một mẫu.

Java 8 sẽ giới thiệu rất nhiều phiên bản đặc biệt nguyên thủy của các giao diện chức năng, như IntFunction. Nó sẽ khá xấu xí.

+0

Cảm ơn sự giúp đỡ của bạn. Nhiều đánh giá cao. – felice

1

Tôi nghĩ rằng mối quan tâm chính ở đây là hiệu suất. Các tham số kiểu chung phải là một kiểu con của Object, khi đó việc triển khai chung nên sử dụng các trình bao bọc DoubleFloat (vì các kiểu nguyên thủy không có sẵn cho cơ chế chung).

Trong trường hợp này, mọi trường hợp của Curve sẽ khởi tạo một số đối tượng, một cho mỗi giá trị kép/float. Giá trị thực tế sẽ được đọc bằng lời gọi phương thức như doubleValue()floatValue(). Hơn nữa, vì các trình bao bọc nguyên thủy là bất biến, kết quả của bất kỳ hoạt động nào liên quan đến trình bao bọc phải được lưu trữ trong một cá thể mới. Điều đó dường như không thể chấp nhận được vì Curve có thể sẽ được sử dụng trong các phép tính nặng.

+0

Cảm ơn vì điều đó. Như bạn đề nghị Curve sẽ cần thực hiện nhiều phép tính. – felice

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