2015-03-08 13 views
5

Tôi đã xem những điều sau:Có sử dụng một phương thức tĩnh rỗng trong một lớp có trình khởi tạo tĩnh có thể chấp nhận/thành ngữ không?

class Foo { 

    static { 
    // setup for logging and configuration 
    } 

    public static void setup() { 
    // do nothing 
    } 

} 

Đây có phải là mã Java thành ngữ không? Có nên tránh những lý do cụ thể nào không?

Điều này được tìm thấy trong bộ thử nghiệm.

Mối quan tâm ban đầu của tôi là khởi tạo về mặt lý thuyết có thể xảy ra mà không cần gọi #setup().

+0

Vâng, đối với một, nó ngăn cản các lớp con của 'Foo' từ việc thực hiện riêng của họ về' setup() '... Sẽ được quan tâm để xem những gì rất kinh nghiệm nói. – mazaneicha

+1

@mazaneicha Không có vấn đề gì với một 'Bar mở rộng Foo {public static void setup() {...}}' – laune

+0

@mazaneicha no it no –

Trả lời

-1

Đây có phải là mã Java thành ngữ không?

số

Có lý do cụ thể này nên tránh?

Có: nó khó hiểu, được minh chứng bằng các nhận xét cho câu hỏi này.

Quan tâm ban đầu của tôi là khởi tạo về lý thuyết có thể xảy ra mà không cần gọi #setup().

tôi sẽ đoán mối quan tâm của tác giả đã khởi tạo có thể không xảy ra mà không gọi setup(). Phương thức setup() đảm bảo rằng trình khởi tạo tĩnh đã thực thi "thiết lập để ghi nhật ký và cấu hình" của nó. Có lẽ, có những tác dụng phụ đối với cấu hình này mà tác giả tìm cách đảm bảo bằng cách gọi phương thức trống.

0

Mã bạn đã đăng chính xác những gì bạn sẽ gặp phải? Trong JUnit, thực tế phổ biến là sử dụng một phương thức tĩnh được chú thích với @BeforeClass để định cấu hình lớp thử nghiệm và một phương thức cá thể được chú thích bằng @Before để định cấu hình từng thử nghiệm đơn vị.

(Dưới đây là ví dụ về việc sử dụng chúng: http://examples.javacodegeeks.com/core-java/junit/junit-before-and-beforeclass-example/)

Nếu không, nó có vẻ kỳ quặc ...

+0

Xem OP của [bình luận] (http://stackoverflow.com/questions/28929588/is-using-an-empty-static-method-in-a-class-that-has-a-static-initializer-accepta/7117?noredirect = 1 # comment46115409_28929792) cho biết mục đích của phương thức 'setup()' không phải là một phần của JUnit. – jaco0646

0

Đó chắc chắn không phải thành ngữ như bạn đang hạn chế các phương pháp tĩnh và khối từ thừa kế để phân lớp . Và vâng, đối với các phương thức khởi tạo, các phương thức tĩnh sẽ không cần phải được gọi khi chúng được khởi tạo tại thời điểm nạp lớp vào JVM. Và trong khi thực hiện, các khối tĩnh trước tiên phải thực thi từ trên xuống dưới.

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