2015-01-06 22 views
5

Tôi đang cố gắng tìm cách buộc người dùng sẽ triển khai giao diện hoặc sẽ mở rộng lớp để tạo một số hàm tạo. Tôi nghĩ rằng một cách để làm điều đó sẽ là tạo ra một nhà xây dựng trừu tượng trong một lớp trừu tượng, nhưng tôi đã tìm ra rằng tôi không thể làm điều đó.Lớp trừu tượng Java, hàm tạo trừu tượng

Tôi làm cách nào để giải quyết vấn đề này? Có một số phương pháp để buộc người dùng tạo một hàm tạo cụ thể không?

Cảm ơn!

+1

gì constructors nào bạn muốn thực hiện (và tại sao)? – ErstwhileIII

+0

Một hàm tạo rỗng và một hàm tạo bản sao. Tuy nhiên tôi đặt câu hỏi bởi vì tôi muốn biết cho một mục đích chung. – yonutix

Trả lời

6

No. Tuy nhiên, vì Constructors thường được thay thế bởi factorymethods, bạn có thể triển khai factorymethods trừu tượng hoặc chỉ các mẫu khác như builderpattern.

+1

Phương pháp nhà máy là một gợi ý tốt ở đây. – vikingsteve

4

Không có.

Tuy nhiên, bạn có thể xây dựng một khung kiểm tra đơn vị khai thác phản ánh để đảm bảo rằng các nhà xây dựng chính xác có mặt.

+0

Cảm ơn, tôi nên thực hiện một phương thức có tên newInstance trong giao diện do lớp thực hiện. – yonutix

3

Bạn không thể tạo một constructor abstract, nhưng đây là một cách giải quyết mà bạn có thể làm:

Thực hiện một lớp abstract với tất cả các nhà thầu bạn muốn người dùng để thực hiện. Trong mỗi người trong số họ, bạn sẽ có một câu lệnh duy nhất đề cập đến phương thức abstract từ lớp này, việc triển khai nào sẽ ở trong lớp con. Bằng cách này, bạn sẽ buộc người dùng phải cung cấp một cơ quan cho hàm tạo, thông qua triển khai phương pháp trừu tượng. Ví dụ:

public abstract class MyAbstractClass { 
    public MyAbstractClass(int param) { 
     method1(param); 
    } 

    public MyAbstractClass(int param, int anotherParam) { 
     method2(param, anotherParam); 
    } 

    protected abstract void method1(int param); 

    protected abstract void method2(int param, int anotherParam); 
} 

Trong việc thực hiện, bạn sẽ có buộc để cung cấp thực hiện hai phương pháp này, có thể đại diện cho các cơ quan của hai cấu trúc:

public class MyClass extends MyAbstractClass { 
    public MyClass(int param) { 
     super(param); 
    } 

    public MyClass(int param, int anotherParam) { 
     super(param, anotherParam); 
    } 

    public void method1(int param) { 
     //do something with the parameter 
    } 

    public void method2(int param, int anotherParam) { 
     //do something with the parameters 
    } 
} 
+0

Câu trả lời hay nhờ – yonutix

+0

Bạn được chào đón. –

+0

Tuy nhiên phương pháp nhà máy đơn giản được chứng minh là một ý tưởng tốt hơn. – yonutix

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