2009-12-31 26 views
47

Có ích khi thực hiện các phương pháp riêng tư cuối cùng không? Điều đó có cải thiện hiệu suất không?Đặt các phương thức riêng tư cuối cùng?

Tôi nghĩ rằng "riêng tư cuối cùng" không có ý nghĩa nhiều, bởi vì phương pháp riêng tư không thể bị ghi đè. Vì vậy, phương pháp tra cứu sẽ hiệu quả như khi sử dụng cuối cùng.

Và sẽ tốt hơn nếu đặt phương thức trợ giúp riêng tư tĩnh (nếu có thể)?

Điều gì tốt nhất để sử dụng?

private Result doSomething() 
    private final Result doSomething() 
    private static Result doSomething() 
    private static final Result doSomething() 
+0

Phương pháp riêng không được kế thừa và do đó không thể được ghi đè lên. Một lớp con có thể chứa một phương thức có cùng tên như một phương thức riêng cuối cùng trong lớp cha. Do đó, nó không tạo ra cảm giác để khai báo một phương thức như là trận chung kết riêng tư. – CKing

Trả lời

65

Thêm final vào các phương pháp không cải thiện hiệu suất với Sun HotSpot. Trong trường hợp final có thể được thêm vào, HotSpot sẽ thông báo rằng phương pháp này không bao giờ bị ghi đè và do đó xử lý nó giống nhau.

Trong Java private các phương pháp không phải là ảo. Bạn không thể ghi đè lên chúng, ngay cả khi sử dụng các lớp lồng nhau nơi chúng có thể truy cập được vào các lớp con. Ví dụ, các phương thức mà instructoin gọi là privates khác với các phương thức được sử dụng cho các cá nhân không phải là cá nhân. Thêm final vào các phương thức riêng tư sẽ không có tỷ lệ cược nào.

Như mọi khi, những loại tối ưu hóa vi mô này không đáng để dành thời gian.

+0

... trong 99,9% thời gian. Và bạn sẽ biết khi nào tối ưu hóa vi mô có ý nghĩa. Quan trọng hơn, 'khai báo phương thức' final 'không có ý nghĩa ngữ nghĩa nên nó chỉ thêm nhầm lẫn khi không có; chỉ 'riêng tư 'là ​​đủ. –

8

No. Nó sẽ không. các phương thức riêng không được kế thừa. Vì vậy, làm cho họ cuối cùng là một điểm tranh luận. Cũng lưu ý rằng bạn không nên thực hiện các phương thức cuối cùng để thực hiện. JVM thông minh hơn thế. Loại tối ưu hóa này không hữu ích lắm. Bạn nên làm cho mọi thứ cuối cùng, riêng tư, riêng tư, được bảo vệ, riêng tư, vv dựa trên ngữ nghĩa và thiết kế.

21

private static Result doSomething(), nếu phương pháp này không sử dụng bất kỳ biến mẫu nào. Trong bất kỳ trường hợp nào làm cho chúng cuối cùng không có ý nghĩa vì người truy cập là riêng tư.

7

Đánh dấu một phương thức riêng tư là cuối cùng không thay đổi bất cứ điều gì nhưng nó có thể gây nhầm lẫn cho các nhà phát triển trẻ xem mã của bạn. Giữ nó đơn giản.

4

IBM phát triển hoạt động: Java theory and practice: Is that your final answer? bài viết là một oldie nhưng goodie về việc sử dụng từ khóa final trong Java:

+0

Người đàn ông tôi muốn C# có từ khóa cuối cùng. Thay vào đó nó có const, readonly và niêm phong. bleh. –

0

Bằng cách thực hiện phương pháp cuối cùng, chúng tôi không thể ghi đè phương pháp này. Vì các phương thức Private không thể được truy cập bên ngoài lớp. Không có sence làm cho phương pháp cuối cùng và riêng tư. Nó có thể đạt hiệu suất.

+1

Nó sẽ không đạt hiệu suất, trình biên dịch thông minh hơn –

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