Mọi lớp Java có một hàm tạo không đối số không?Chúng ta có nên luôn luôn có một hàm tạo không đối số trong một lớp không?
Trả lời
Không
Nếu nó làm cho không có ý nghĩa để tạo ra một thể hiện của lớp mà không cung cấp bất kỳ thông tin cho các nhà xây dựng sau đó bạn không cần phải có một constructor không có đối số.
Ví dụ tốt là java.awt.Color lớp học, mà tất cả các ctors đều được tranh luận.
Một ví dụ điển hình - loại không thay đổi. –
@andy Điều này xứng đáng là câu trả lời của riêng nó. – Trillian
Ví dụ truy cập: Hạt Java - http://en.wikipedia.org/wiki/Java_Beans#JavaBean_conventions –
Không, nó không có ý nghĩa để luôn tạo không constructors luận, các kịch bản sau đây là ví dụ mà nó làm cho tinh thần để cung cấp ít nhất một số đối số-constructor
- phụ thuộc buộc rằng lớp chính nó không thể tạo ra.
- Không có giá trị mặc định hợp lý cho thuộc tính.
trường hợp bạn muốn có/cần một constructor không có đối số:
- Bạn muốn tuân thủ các đặc điểm kỹ thuật JavaBeans (làm cho tinh thần cho các đối tượng dữ liệu đơn giản).
- Tất cả các trường có thể được khởi tạo bằng các giá trị mặc định.
- Bạn muốn sử dụng khung làm việc cần.
Một trong các đối số sai khi có hàm tạo đối số bằng 0 trong quan điểm của tôi là danh sách dài các đối số. Để có giải pháp tốt hơn việc chấp nhận khởi tạo đối tượng không ở trạng thái an toàn sau khi tạo:
- Sử dụng mẫu Trình tạo.
- Cung cấp các đối tượng vùng chứa chuyên dụng để định cấu hình phiên bản thông qua hàm tạo.
- Cung cấp nhiều hàm tạo trong đó đối số cơ sở của mỗi đối số là các tham số bắt buộc không được gán mặc định.
No. Tuy nhiên, có những ngoại lệ. Ví dụ, nếu bạn định lớp của bạn chỉ chứa các phương thức static hoặc một lớp đơn hoặc một lớp chỉ với các hằng số thì bạn nên tạo một hàm tạo riêng riêng không có đối số nào để ngăn không cho nó được khởi tạo một cách rõ ràng.
Như Andy Thomas-Cramer đã ghi chú khác, nó thậm chí còn không thể:
class NeedsToBeImmutable {
// For a class to be immutable, its reachable state
// MUST be reached through a final field
private final String stuff;
//!!Compile error!!
public NeedsToBeImmutable(){}
public NeedsToBeImmutable(String stuff){
this.stuff = stuff;
}
//getters...
}
Chúng ta có nên luôn có một hàm tạo không đối số không? Không. Luôn luôn có thể? Có, nhưng thường không mong muốn. public NeedsToBeImmutable() {stuff = "Hello World"} // không biên dịch lỗi nhưng vô ích – emory
- 1. Chúng ta có nên luôn ghi đè bằng?
- 2. Là một hàm tạo luôn luôn là một đối tượng hàm?
- 3. Tại sao chúng ta nên luôn trả về các giá trị từ một hàm?
- 4. Khi nào chúng ta nên sử dụng lớp học và khi chúng ta không nên
- 5. Chúng ta có thể tạo một hàm tạo bản sao lớp ảo trong C++
- 6. Chúng ta có thể lấy kiểu đối số lambda không?
- 7. Chúng ta có thể định nghĩa một hàm mẫu cho một số kiểu dữ liệu không?
- 8. Tại sao BIAS là cần thiết trong ANN? Chúng ta có nên có BIAS riêng biệt cho mỗi lớp không?
- 9. Có một thể hiện của siêu lớp được tạo khi chúng ta khởi tạo một đối tượng không?
- 10. prepareForSegue ** luôn luôn ** tạo một newViewViewController mới?
- 11. Chúng ta có thể tạo một đối tượng của một giao diện không?
- 12. Chúng ta có nên đi theo cách của Corona không?
- 13. Tại sao chúng ta không được phép chỉ định một hàm tạo trong một giao diện?
- 14. Tôi có nên luôn sử dụng Generics không?
- 15. Chúng ta nên có gì trong một lớp logic nghiệp vụ (BLL)
- 16. Một khung nhìn SQL có luôn ở trong 1NF không?
- 17. Các lớp có nguồn gốc không phải QObject "luôn luôn" được đặt trên ngăn xếp?
- 18. UIButton - chúng ta có nên phát hành hay không?
- 19. Nên sử dụngLayoutRounding & SnapsToDevicePixels có được sử dụng luôn không?
- 20. Luôn có một cuộc gọi lại cho hàm Ember.js .then?
- 21. Làm các lớp ẩn danh * luôn luôn * duy trì một tham chiếu đến cá thể kèm theo của chúng?
- 22. Chúng ta có thể tạo một thể hiện của một giao diện trong Java không?
- 23. Tôi có luôn luôn có `(a/b * b) + a% b == a` khi b không bằng không?
- 24. Có cần thiết một tin nhắn đại biểu phải luôn luôn có hiệu lực như một kiểu trả về không?
- 25. Là một COMException của 0x80040154 luôn luôn 'Lớp không được đăng ký'?
- 26. Có phải "==" trong Ruby luôn luôn có giá trị bình đẳng không?
- 27. Mã tĩnh có luôn được thực hiện khi chúng tôi sử dụng một lớp học lần đầu tiên không?
- 28. Chúng ta có nên sử dụng ScalaSignature trực tiếp không?
- 29. Sử dụng động lực để tạo một hàm lambda mà luôn luôn trả về true
- 30. Tôi có nên luôn bọc InputStream dưới dạng BufferedInputStream không?
chỉ trong một số khuôn khổ – Woot4Moo