2010-08-16 61 views

Trả lời

22

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.

+7

Một ví dụ điển hình - loại không thay đổi. –

+1

@andy Điều này xứng đáng là câu trả lời của riêng nó. – Trillian

+1

Ví dụ truy cập: Hạt Java - http://en.wikipedia.org/wiki/Java_Beans#JavaBean_conventions –

10

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

  1. phụ thuộc buộc rằng lớp chính nó không thể tạo ra.
  2. 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ố:

  1. 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).
  2. Tất cả các trường có thể được khởi tạo bằng các giá trị mặc định.
  3. 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:

  1. Sử dụng mẫu Trình tạo.
  2. 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.
  3. 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.
3

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.

4

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... 
} 
+1

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

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