2010-01-15 31 views
5

Tôi chỉ thấy một lớp học (một module API lớn), nơi có rất nhiều thứ nhưjava: đang sử dụng static int = 1 cuối cùng tốt hơn chỉ là 1 bình thường?

readParamString(Object params, int index) 

và họ có trong lớp đó 10 lĩnh vực

final static int PARAM1 = 1 
... 
final static int PARAM10 = 10 

mà đang được sử dụng với chức năng readParam

nhưng bạn cũng có thể sử dụng một int bình thường như readParamString(o, 1);

là cuối cùng tĩnh int bằng cách nào đó tốt hơn t han sử dụng một int bình thường?

Trả lời

1

Bằng cách khai báo static tĩnh cuối cùng, bạn sẽ có một tham chiếu duy nhất cho biến int. Và một điều quan trọng nữa là bạn không thể thay đổi giá trị của int sau khi khai báo cuối cùng. Nếu int không phải là cuối cùng thì bạn có thể thay đổi giá trị của biến. Vì vậy, nếu bạn không muốn thay đổi giá trị biến thông qua mã ngoài thì bạn có thể sử dụng static static cuối cùng.

+5

không mạch lạc nhiều? –

+0

Không có thứ nào trong số này phù hợp với các chữ cái trong Java, ngoại trừ nếu giá trị không đổi có nghĩa là một cái gì đó (được chỉ định bởi một tên như 'NUMBER_OF_WOGGLES_IN_A_BOGGLE' thay vì' PARAM1') – Injektilo

1

có bằng cách nào đó tốt hơn so với sử dụng một bình thường int

Nhưng nếu bạn đang sử dụng Java 5 hoặc mới hơn enum là tốt hơn so với final static biến.

+0

Phương pháp "tĩnh cuối cùng" vẫn hữu ích nếu bạn muốn mã hóa nhiều giá trị trong một số nguyên sử dụng mã hóa một nóng (theo đó bạn bitwise-OR các giá trị khác nhau). – Adamski

+0

Trong trường hợp cụ thể này, các số liệu thống kê cuối cùng hoàn toàn vô dụng. – jarnbjo

+2

@Adamski: đối với phương pháp tiếp cận OO thực, tôi khuyên bạn nên sử dụng 'EnumSet' thay vì phương pháp tiếp cận bitwise-OR cũ của trường. –

15

Một lợi thế của việc khai báo hằng số tĩnh cuối cùng là ngăn không cho nhiều tham chiếu đến cùng một giá trị bằng chữ througout mã, có khả năng dẫn đến biến thể không mong muốn; ví dụ. nếu một lập trình viên vô tình thay đổi một chữ mà không thay đổi các chữ cái khác.

Trong ví dụ của bạn, tôi đặt câu hỏi về giá trị khai báo PARAM1 không đổi với giá trị 1, đặc biệt nếu điều này là riêng tư cho lớp chứa và chỉ được tham chiếu một lần. Tuy nhiên, nếu có một số ý nghĩa ngữ nghĩa với giá trị theo nghĩa đen thì nó có thể hữu ích hơn; ví dụ.

public static final int LOAD_ACTION = 1; 
public static final int SAVE_ACTION = 2; 
public static final int DELETE_ACTION = 4; 
public static final int MOVE_ACTION = 8; 

Tuy nhiên, thường là một enum sẽ được sử dụng thay cho cách tiếp cận này.

+2

Nhưng nếu giá trị của 1 thay đổi thì sao ?! –

+0

@ John: Quan điểm của tôi là nếu PARAM1 chỉ được sử dụng ở một nơi trong mã riêng tư cho lớp thì có rất ít giá trị trong việc xác định nó. Việc sử dụng quá nhiều hằng số tĩnh cuối cùng có thể làm cho mã IMHO không thể đọc được. – Adamski

+2

+1, số ma thuật trong mã phải luôn được xác định bằng tên ngữ nghĩa có ý nghĩa để làm cho chúng có thể đọc được. – Paolo

-2

Có thể vì biến được biên dịch bởi trình biên dịch.

4

Trong ví dụ bạn đưa ra, tôi muốn nói rằng việc có các giá trị được đặt tên không tốt hơn chỉ sử dụng int trực tiếp. Tham số là một số, do đó, biểu diễn int của tham số cũng giống như mô tả như phiên bản đã đặt tên.

này có vẻ là loại giống như khi tôi thỉnh thoảng đi qua mã C có những thứ như

#define ZERO 0 
#define ONE 1 

Có thực sự không có nhiều điểm. Trong thực tế, khi tôi nhìn thấy những cái tên được sử dụng (thay vì khi tôi nhìn vào các định nghĩa), tôi bị cám dỗ để nhảy đến các định nghĩa để đảm bảo rằng các tên không nói dối (Đó là một thời gian dài, nhưng, Tôi đã thực sự đi qua mã có FALSE được định nghĩa là 1, -1 hoặc một cái gì đó khác không, ví dụ, đó là thực sự, thực sự xấu).


Chỉnh sửa: trên cái nhìn thứ hai, dường như những cái tên có thể chỉ ra những lĩnh vực trong tham số đầu tiên được quan tâm, trong trường hợp những cái tên có thể làm cho ý nghĩa hơn - miễn là những cái tên có một số tie ý nghĩa đến trường thay vì chỉ bù đắp số. Thật khó để nói có hay không đó là trường hợp, vì bạn có thể diễn giải mã bạn đang thực sự làm việc với.

9

Thật ngớ ngẩn.

Lý do trích xuất các hằng số là đặt tên cho chúng. PARAM1..PARAM10 không được nói nhiều.

+0

+1. Một lý do khác có thể là theo dõi các tham chiếu và có thể duy trì chúng ở một nơi. Nhưng một cái tên có ý nghĩa sẽ tốt hơn ở đó. – Thilo

+0

Lưu ý rằng các tên ngớ ngẩn có thể có một mục đích duy nhất, cụ thể là để có thể ghi lại việc sử dụng chúng với JavaDoc. –

1

Tôi nghĩ rằng nó không được thực hiện cho biến tĩnh cuối cùng nhưng có tên gọi. Và thậm chí cho dù PARAMETER1 đang nói nhiều hơn chỉ là 1. Do đó có thể cải thiện sự hiểu biết trong khi đọc mã.

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