2011-02-08 34 views
53

Tôi hiện đang làm việc theo cách của mình thông qua cuốn sách "Tự phát triển ứng dụng Android cho chính mình trong 24 giờ" do Sams xuất bản. Tôi tương đối mới với Java, Android hay cách khác. Tôi có một nền tảng rất vững chắc trong ActionScript 3, trong đó có đủ điểm tương đồng với Java mà bản thân ngôn ngữ không khó nắm bắt, nhưng tôi vẫn có một số câu hỏi về lý do đằng sau một số mẫu mã trong cuốn sách. Ví dụ: đây là chức năng đi kèm với mã mẫu cho Giờ 9:Tại sao khai báo một đối số hàm để là kết quả cuối cùng?

private void processScores(final TableLayout scoreTable, 
     XmlResourceParser scores) throws IOException, XmlPullParserException{ 

Trong chữ ký hàm này, tác giả đã khai báo đối số scoreTable là đối số cuối cùng. Tôi hơi bối rối về lý do tại sao họ làm điều này. Nó sẽ không vượt qua tâm trí của tôi thậm chí cố gắng để gán một giá trị mới cho đối số functionTable (nó được coi là một thực hành xấu trong ActionScript). Hơn nữa, tôi đã không thực sự nhìn thấy bất cứ ai làm điều này trong bất kỳ của thế giới thực Java tôi đã kiểm tra hoặc chuyển vào AS3.

Có điều gì đó cụ thể về phát triển Android khiến đôi khi cần phải khai báo một số đối số chức năng nhất định không?

Tại sao đối tượng TableLayout được khai báo cuối cùng, chứ không phải XmlResourceParser?

+0

DUPE - http://stackoverflow.com/questions/4162531/making-java-method-arguments-as-final – Robino

Trả lời

84

Có hai lý do chính bạn có thể muốn đánh dấu đối số final. Đầu tiên, nếu bạn đang lập kế hoạch sử dụng đối số trong một lớp bên trong vô danh, thì bạn phải đánh dấu nó là final để nó có thể được tham chiếu trong lớp đó. Đây thực sự là một trường hợp sử dụng khá phổ biến để đánh dấu các đối số cuối cùng.

Lý do phổ biến khác để đánh dấu đối số final là để ngăn không cho bạn vô tình ghi đè lên chúng. Nếu bạn thực sự không muốn thay đổi các đối số, thì có lẽ bạn nên đánh dấu chúng final để nếu bạn thực sự làm, bạn sẽ gặp lỗi tại thời gian biên dịch thay vì tìm ra lúc chạy mà mã của bạn có lỗi .

+0

Cảm ơn bạn, tôi chắc chắn không biết yêu cầu này liên quan đến các lớp bên trong vô danh. Vì vậy, sau đó nó sẽ được an toàn để suy ra dựa trên thực tế là chỉ có đối tượng TableLayout được tuyên bố cuối cùng rằng chức năng này là sử dụng nó đúng như một bảo vệ chống lại mã không cẩn thận? Tại sao nó đặc biệt hơn trong trường hợp này hơn là XmlResourceParser? Hay là những câu hỏi duy nhất mà tác giả sách có thể biết câu trả lời? – scriptocalypse

+0

@ scriptocalypse- Bạn biết đấy, tôi không chắc chắn. Tôi đoán nó là cho trường hợp lớp bên trong vô danh, vì nếu không bạn nói đúng và nó có ý nghĩa hơn để đánh dấu cả hai cuối cùng. Tôi không thể nói cho các tác giả, mặc dù; có lẽ bạn có thể liên hệ với họ hoặc nhà xuất bản? – templatetypedef

+4

Thực ra, 'trường hợp lớp bên trong vô danh' là một lý do rất tốt. Trong Android, tôi thấy mình thường sử dụng các lớp 'OnClickListener' và' AsyncTask' và khả năng sử dụng lại các biến này trực tiếp trong chúng có ích. Một liên kết khác để xem xét: http://developer.android.com/guide/practices/design/performance.html#myths. –

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