2012-09-28 39 views
2

我有一個與@SuppressWarnings("unused")註釋有關的基本問題。基本上,我想在我的類的聲明部分中的代碼塊中禁用未使用的警告。我不希望在整個班級中壓制未使用的警告。在聲明部分使用@SuppressWarnings(「unused」)註釋

目前,我這樣做:

public class MyClass { 
    //Constants 
    private final String ACCEPT = "Yes"; 
    @SuppressWarnings("unused") 
    private final String DENY = "No";   //Not currently used 
    private final String TENTATIVE = "Maybe"; 
    @SuppressWarnings("unused") 
    private final String POSTPONE = "Later";  //Not currently used 

    //Variables 
    private int counter; 
    .... 

我覺得上面的代碼是有點亂,在隨機像拋出的註解。我想要做的是一樣的東西:

//Constants 
@SuppressWarnings("unused") 
{ 
    private final String ACCEPT = "Yes"; 
    private final String DENY = "No";   //Not currently used 
    private final String TENTATIVE = "Maybe"; 
    private final String POSTPONE = "Later";  //Not currently used 
} 

//Variables 
private int counter; 
.... 

這,當然,Java作爲一種阻斷非法的,不能簡單地這樣做。它沒有什麼大不了的,但我很好奇,如果我錯過了一個明顯而優雅的解決方案。

+0

爲什麼你不讓他們成爲靜態的特定原因? – betomontejo

+0

好點Betoverse。我可以讓它們變成靜態的。我只是把它作爲一個例子。但是,我的編譯器仍然會在未使用的靜態字段中引發警告。 – Cody

回答

6

如果你想繼續保留所有這些未使用的常量,一個快速和骯髒的把戲將是;

public class MyClass { 
//Variables 
    private int counter; 

@SuppressWarnings("unused") 
    private static final class UnusedConstants{ 
     private final String ACCEPT = "Yes"; 
     private final String DENY = "No";    
     private final String TENTATIVE = "Maybe"; 
     private final String POSTPONE = "Later";  
    } 
} 

而且我會讓它們變成靜態的,但是你的呼叫。

編輯: 或者說,我認爲是好得多:

public class MyClass { 

    private enum Answer { 

     ACCEPT ("Yes"), 
     DENY ("No"), 
     TENTATIVE("Maybe"), 
     POSTPONE("Later"); 

     private final String answer; 

     private Answer(String answer) { 
     this.answer = answer; 
     } 

     public String toString() { 
      return answer; 
     } 
    } 
}  

這樣,你沒有得到未使用的警告,只要您使用的值中的至少一個。

+0

我認爲這與我所期待的差不多。插入未使用的常量的原因是爲了可讀性,以及它們將在未來使用的事實。我不確定這是否會提高可讀性,但它告訴我也許我應該將常量重新定位到專用的常量類中。這可能是最好的設計決策。謝謝! – Cody

+0

添加了一個編輯,更好的東西穿過了我的腦海:) – Chirlo

+0

啊,我喜歡那個解決方案。清潔工肯定。 – Cody

相關問題