2012-01-10 34 views

Trả lời

9

Giá rẻ đủ để rơi vào danh mục tối ưu hóa sớm. Đừng lãng phí thời gian ngay cả suy nghĩ hoặc đặt câu hỏi về nó trừ khi bạn đã lược tả ứng dụng của bạn và xác định rằng đó là một vấn đề, và quan trọng nhất: không thỏa hiệp thiết kế của bạn để tránh nó.

0

Không, nó không ảnh hưởng đến hiệu suất đủ quan trọng.

2

Nhập liệu sẽ có chi phí vì thông tin loại thời gian chạy phải được kiểm tra để đảm bảo quá trình truyền sẽ hoạt động. So với mọi thứ khác, tôi nghi ngờ điều này sẽ có ý nghĩa, nhưng bạn có thể thử và đo lường nó.

Nói chung, nhập chữ là (IMHO) một dấu hiệu cho thấy có điều gì đó không đúng trong thiết kế. Chắc chắn, đôi khi bạn không thể tránh nó (làm việc với các bộ sưu tập cũ), nhưng tôi chắc chắn sẽ xem nếu tôi có thể loại bỏ nó.

4

Tùy thuộc vào ý bạn bằng cách định kiểu. Có "upcasting" mà chi phí bạn không có gì và có "downcasting" mà chi phí bạn rất nhiều. Câu trả lời cho câu thứ hai cũng bắt đầu với "nó phụ thuộc". Thông thường tôi tránh downcasting trong mã của tôi bởi vì, từ expierience của tôi, nếu nó được lạm dụng trong mã của bạn, nó có nghĩa là thiết kế là xấu. Mặt khác, không nhất thiết phải có nghĩa là nó không nên được sử dụng ở tất cả.

+2

+1: Mặc dù có thể tốn một chút về hiệu suất, thiết kế tốt là lý do quan trọng hơn để tránh. ;) –

4

JavaWorld: The cost of casting

Đúc được sử dụng để chuyển đổi giữa loại - giữa các loại tài liệu tham khảo trong Đặc biệt, đối với loại đúc hoạt động mà chúng ta đang quan tâm đây.

upCast hoạt động (còn gọi là chuyển đổi mở rộng trong Java Language Specification) chuyển đổi một tài liệu tham khảo lớp con đến một tài liệu tham khảo lớp tổ tiên . Thao tác này đúc thường là tự động, vì nó luôn an toàn và có thể được triển khai trực tiếp bởi trình biên dịch.

downCast hoạt động (còn gọi là chuyển đổi thu hẹp trong Java Language Specification) chuyển đổi một tài liệu tham khảo lớp tổ tiên để một lớp con tham khảo. Thao tác đúc này tạo phí trên không thực thi, vì Java yêu cầu phải chọn mẫu thử tại thời gian chạy để đảm bảo rằng nó hợp lệ. Nếu đối tượng được tham chiếu không phải là trường hợp của loại mục tiêu cho dàn diễn viên hoặc lớp con thuộc loại đó, không được phép sử dụng và phải ném java.lang.ClassCastException.