2010-12-28 27 views
63

Tôi cần tạo một lớp cơ sở triển khai một số giao diện với nhiều phương thức, ví dụ bên dưới.Triển khai nhiều giao diện với Java - có cách nào để ủy quyền không?

Có cách nào dễ dàng hơn để ủy quyền các cuộc gọi phương thức này mà không phải tạo một loạt các phương thức trùng lặp không?

public class MultipleInterfaces implements InterFaceOne, InterFaceTwo { 

    private InterFaceOne if1; 
    private InterFaceTwo if2; 

    public MultipleInterfaces() { 
     if1 = new ImplementingClassOne(); 
     if2 = new ImplementingClassTwo(); 
    } 

    @Override 
    public void classOneMethodOne { if1.methodOne(); } 
    @Override 
    public void classOneMethodTwo { if1.methodTwo(); } 
    /** Etc. */ 


    @Override 
    public void classTwoMethodOne { if2.methodOne(); } 
    @Override 
    public void classTwoMethodTwo { if2.methodTwo(); } 
    /** Etc. */ 

} 

Trả lời

74

Như đã nói, không có cách nào. Tuy nhiên, một IDE khá phong nha có thể tự động tạo các phương thức ủy nhiệm. Ví dụ Eclipse có thể làm. thiết lập đầu tiên một mẫu:

public class MultipleInterfaces implements InterFaceOne, InterFaceTwo { 
    private InterFaceOne if1; 
    private InterFaceTwo if2; 
} 

sau đó click chuột phải, chọn Nguồn> Tạo Đại biểu Phương pháp và đánh dấu vào cả if1if2 lĩnh vực và nhấn OK .

Xem thêm các màn hình sau đây:

alt text


alt text


alt text

+8

Nhờ BalusC và Lukas cho nhanh như vậy và câu trả lời hữu ích. Dự án của tôi dựa trên Eclipse, vì vậy tôi có thể sử dụng câu trả lời của BalusC trong thời gian thực gần! Làm việc như một say mê, và đã cứu tôi vài giờ làm việc bực bội. Là một người dùng mới của diễn đàn này, tôi ngạc nhiên và vui mừng về chất lượng của những người tham gia ở đây. –

+1

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

+6

Gợi ý tuyệt vời! Tôi không biết điều đó và sẽ tiết kiệm 100 giờ trong tương lai :) Điều tốt về stackoverflow: bạn cũng sẽ học hỏi từ những câu hỏi mà bạn không tự hỏi mình! –

5

Thật không may: KHÔNG.

Chúng tôi đều háo hức chờ đợi sự hỗ trợ Java cho extension methods

0

Không có cách nào khá. Bạn có thể sử dụng proxy với trình xử lý có các phương thức đích và ủy quyền mọi thứ khác cho chúng. Tất nhiên bạn sẽ phải sử dụng một nhà máy bởi vì sẽ không có nhà xây dựng.

3

Có một cách để thực hiện nhiều giao diện.

Chỉ cần mở rộng một giao diện từ khác hoặc tạo giao diện mở rộng giao diện được xác định trước Ex:

public interface PlnRow_CallBack extends OnDateSetListener { 
    public void Plan_Removed(); 
    public BaseDB getDB(); 
} 

bây giờ chúng tôi có giao diện mở rộng giao diện khác để sử dụng trong ra lớp chỉ cần sử dụng giao diện mới này, người thực hiện hai hay nhiều giao diện

public class Calculator extends FragmentActivity implements PlnRow_CallBack { 

    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 

    } 

    @Override 
    public void Plan_Removed() { 

    } 

    @Override 
    public BaseDB getDB() { 

    } 
} 

hy vọng điều này giúp

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