2010-05-19 43 views
9

Tôi muốn một cơ chế để tự động cảnh báo thời gian biên dịch. Tôi đang sử dụng nó để gắn cờ mã chưa hoàn thành nên tôi không thể quên nó sau này. @ Được chấp nhận là gần nhưng cảnh báo tại trang web người gọi, không phải tại trang web sáng tạo. Tôi đang sử dụng nhật thực. Một cái gì đó như #Warning trong C#.cảnh báo lực trong java

+2

Bạn đang sử dụng Eclipse? Bạn có thể sử dụng // TODO trong các nhận xét, chúng sẽ hiển thị trong khung nhìn Tasks. – Etienne

Trả lời

6

Tại sao không chỉ thêm cờ trong mã nguồn như //TODO: hoặc thứ gì đó? Và sau đó chỉ cần tìm kiếm tất cả các lần xuất hiện của TODO trong tệp? Bạn thậm chí có thể có một số lá cờ đặc biệt quá FINISHME hoặc một cái gì đó.

Nếu bạn có hàng trăm TODO trong dự án của mình từ nhóm, bạn có thể lọc theo chuỗi, ví dụ: tên viết tắt của bạn trong các menu trên cùng của khung tác vụ.

2

Tạo chú thích để in ra cảnh báo.

+1

gì, giống như phần mở rộng nhật thực? âm thanh như một cơn đau lớn –

+0

Không, không phải như vậy. –

+0

bạn có nghĩa là xuất ra cảnh báo khi chạy không? –

1

Bạn có thể thử để ném một ngoại lệ nếu một phương pháp chưa hoàn thành được gọi (ví dụ)

throw new UnsupportedOperationException() 

(Hoặc bạn có thể tạo ra ngoại lệ của riêng bạn). Rõ ràng điều này sẽ chỉ giúp trong thời gian chạy (trừ khi bạn thực hiện tìm kiếm hoặc một cái gì đó trong mã của bạn cho nó - nhưng Todo sẽ là giải pháp tốt hơn cho điều đó)

Và nếu bạn đang sử dụng nhật thực, bạn có thể đánh dấu mã chưa xong của mình với // TODO và nó sẽ hiển thị trên danh sách nhiệm vụ của bạn (và rãnh bên phải nếu bạn đã cấu hình nó). Rõ ràng mọi thứ có thể rất ồn ào nếu bạn có rất nhiều thẻ Todo.

+0

không tốt, điều này thay đổi chữ ký phương thức bằng cách thêm mệnh đề ném tất cả các cách lên hệ thống phân cấp thừa kế –

+2

@Dustin Getz: Chỉ cần sử dụng một lớp con của RuntimeException hoặc Lỗi. Điều này không ảnh hưởng đến hệ thống phân cấp hoặc người gọi. –

+2

@Dustin Ngoài ra, UnsupportedOperationException là một RuntimeException –

1

Tôi làm điều này mọi lúc bằng cách chỉ cần đặt "*** TẮT TRÊN ĐÂY ***" hoặc một số nội dung như vậy. Vì đây không phải là hợp lệ Java hoặc C++ hoặc nhiều cú pháp ngôn ngữ khác, trình biên dịch đưa ra một thông báo lỗi cho nó.

Tất nhiên là có lỗi và không phải là cảnh báo. Nếu bạn muốn biên dịch thành công, tôi cho rằng một điều dễ làm là đặt một câu lệnh mà bạn biết sẽ tạo ra một cảnh báo trình biên dịch với một chú thích nói "kết thúc" hoặc bất cứ điều gì.

0

Tôi không chắc chắn nếu có bất cứ điều gì như thế trong java

nhưng đây là cái gì đó có thể giúp bạn:

biên dịch mã bên dưới như thế này:

javac -Xprint verbose.java

public class verbose{ 

    public @interface SomeMessage { 
     String somevalue(); 
    } 


    @SomeMessage(
     somevalue = "WHOOOOHOOOO000000000000000" 
    ) 

    public static void main(){ 
     System.out.println("Hello"); 
    } 
} 
1

Khi tôi muốn cảnh báo người dùng về cách gọi một phương thức, tôi (sử dụng sai) sử dụng chú thích @Deprecated tích hợp để tạo cảnh báo ở phía người gọi. Thực ra nó có ý nghĩa hơi khác, nhưng tôi không quan tâm.

/** [Additional information...] 
* It is marked as deprecated to warn callers. */ 
@Deprecated public void methodForWhichIWantToCreateAWarning(); 
2

Tốt hơn rất nhiều so với việc sử dụng chú thích không được chấp nhận theo chú thích khiêm tốn của tôi, chú thích giảm bớt.

@SuppressWarnings("XXX")

có thể được chú thích gần như ở khắp mọi nơi và miễn là XXX không phải là một lời cảnh báo hợp lệ bạn sẽ nhận được một cảnh báo từ nhật thực về điều đó.

+0

không hoạt động ở đây. Lỗi: "Lỗi cú pháp trên (các) mã thông báo, (các) cấu trúc không đúng chỗ" – RSFalcon7

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