問題:在Java里面怎么樣在靜態方法中調用getClass()?
我有一個類,它必須包含一些靜態方法,在這些靜態方法里面我需要像下面那樣調用getClass() 方法
public static void startMusic() {URL songPath = getClass().getClassLoader().getResource("background.midi");
}
但是 Eclipse 告訴我:
Cannot make a static reference to the non-static method getClass() from the type Object
怎么樣要修復這個編譯時錯誤鴨
What is the appropriate way to fix this compile time error?
回答
答案是:
只需使用classname .class
代替getClass()
。
聲明 Loggers
這獲得了很多的關注,因為這個具體的用例提供了一種插入日志聲明的簡單方法,所以我想在此補充一下我的想法。日志框架通常希望日志被限制在特定的上下文中,比如一個全限定的類名。因此,它們不修改就直接不能復制粘貼。其他答案中提供了聲明paste-safe日志的建議,但是他們都有一些缺點的例如加入了運行時的自檢查和字節碼膨脹。我不推薦這樣。Copy-paste是編輯器需要關心的,所以編輯器的解決方案就最正確的了。
在IntelliJ中,我推薦加入一個實時模板
】
-
使用log作為縮寫
-
使用
private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger($CLASS$.class);
作為模板文本。 -
點擊編輯變量并使用表達式className()去添加類
-
選中復選框用來重新格式化和縮短 FQ 的名稱。
-
將上下文更改為Java:聲明。
你現在如果直接打入 log,它就會自動擴展成為
private static final Logger logger = LoggerFactory.getLogger(ClassName.class);
和自動格式化并且優化你的導入
文章翻譯自Stack Overflow:https://stackoverflow.com/questions/8275499/how-to-call-getclass-from-a-static-method-in-java