2011-05-17 91 views
6

Đôi khi khi bạn đang gỡ lỗi, bạn có đoạn mã không thể truy cập được. Có cách nào để ngăn chặn cảnh báo?Java: Cách @SuppressWarnings mã không thể truy cập?

+0

Có thể không - mã không thể truy cập thường là dấu hiệu của phương pháp được mã hóa sai .. bạn có thể đăng nó lên không? Phải có một số cách để cấu trúc lại nó. –

+12

Có vẻ như anh ta đã thêm một sự trở lại sớm, hoặc có thể là một 'if (false) ...', để gỡ lỗi. Không có gì sai với điều đó. –

+0

tại sao ngăn chặn cảnh báo trong khi gỡ lỗi? cảnh báo là có để nhắc nhở bạn để loại bỏ các mã sau khi bạn hoàn thành gỡ lỗi - IMO nó tốt nhất * không * để ngăn chặn bất kỳ cảnh báo liên quan đến gỡ lỗi. Sự ngăn chặn có ý nghĩa đối với * cảnh báo đã biết và không cần thiết * trong * mã sản xuất *. – vaxquis

Trả lời

4

Cách duy nhất để thực hiện việc này trên bất kỳ trình biên dịch nào là @SupressWarnings("all").

Nếu bạn đang sử dụng Eclipse, hãy thử @SuppressWarnings("unused").

+0

Đây không phải là cách duy nhất. Xem câu trả lời của tôi (http://stackoverflow.com/a/6025389/8946). –

+0

@SoftwareMonkey cách tiếp cận của bạn vẫn gây ra cảnh báo trong Eclipse và IntelliJ. Đây là giải pháp duy nhất hoạt động trên các trình biên dịch và IDE. –

3

Như Cletus tells us,

Nó phụ thuộc vào IDE hoặc trình biên dịch của bạn.

Điều đó nói rằng, ít nhất đối với Eclipse, không có cách nào để thực hiện việc này. Với cấu hình Eclipse của tôi, mã không thể truy cập gây ra lỗi biên dịch, không chỉ là cảnh báo. Cũng lưu ý rằng điều này khác với "mã chết", ví dụ:

if (false) 
{ 
    // dead code here 
} 

mà Eclipse (theo mặc định) phát ra cảnh báo chứ không phải lỗi.

9

Java có (nguyên thủy) hỗ trợ gỡ lỗi như thế này trong đơn giản if về hằng số boolean sẽ không tạo cảnh báo như vậy (và, thực sự khi đánh giá là sai trình biên dịch sẽ loại bỏ toàn bộ khối điều kiện). Vì vậy, bạn có thể làm:

if(false) { 
    // code you don't want to run 
    } 

Tương tự như vậy, nếu bạn đang tạm thời chèn một chấm dứt sớm để gỡ lỗi, bạn có thể làm điều đó như vậy:

if(true) { return blah; } 

hoặc

if(true) { throw new RuntimeException("Blow Up!"); } 

Và lưu ý rằng đặc tả Java tuyên bố rõ ràng rằng các khối điều kiện liên tục sai được loại bỏ tại thời gian biên dịch, và IIRC, các hằng số đúng liên tục có điều kiện bị loại bỏ. Điều này bao gồm như:

public class Debug 
{ 
static public final boolean ON=false; 
} 

... 

if(Debug.ON) { 
    ... 
    } 
+1

javac không tạo ra cảnh báo cho 'if (false)', nhưng trình biên dịch Eclipse thực hiện. –

+0

@Daniel: Thật không may; nó không nên cho một đồng bằng 'if (false)' hoặc khi biến điều kiện duy nhất là 'static boolean' tĩnh được đặt thành' false'. –

+3

Tôi thích cảnh báo vì nó nhắc tôi quay trở lại và làm điều gì đó về mã đã chết, nhưng IIRC nó bị lỗi mặc định trong phiên bản cũ của Eclipse, vì vậy tôi sẽ sử dụng các công cụ như 'if (Math.abs (0) = = 0) '. –

3

Theo Java Language Specification:

Đó là một lỗi thời gian biên dịch nếu một tuyên bố không thể được thực hiện bởi vì nó là không thể truy cập.

Đôi khi bạn có thể chuyển mã không thể truy cập thành mã chết (ví dụ: phần thân của if (false) {...}). Nhưng nó là một lỗi là một phần của định nghĩa ngôn ngữ.

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