2011-11-21 165 views
0

每當我嘗試按以下方法加載屬性文件時。我得到原樣使用Java加載屬性文件

getClass()錯誤無法從Object類型

public static void main(String[] args) { 

     --- 
     --- 

    loadProperties(line); 

} 

private static void loadProperties(String line) { 
     Properties prop = new Properties(); 
     InputStream in = getClass().getResourceAsStream("foo.properties"); 
     try { 
      prop.load(in); 
      for(Object str: prop.keySet()) { 
       Object value = prop.getProperty((String) str); 
       System.out.println(str+" - "+value); 
      } 
      in.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


    } 

任何建議,我怎麼能解決這個使靜態參考非靜態方法的getClass()。

回答

3

您不能通過靜態方法調用getClass。你要麼需要做這在非靜態方法:

class MyClass { 
    public static void main(String[] args) { 
     MyClass obj = new MyClass(); 
     obj.loadProperties(line);  
    } 

    private void loadProperties(String line) { 
     Properties prop = new Properties(); 
     InputStream in = getClass().getResourceAsStream("foo.properties"); 
     ... 
    } 
} 

或使用類文本,這確實在靜態方面的工作,例如

InputStream in = MyClass.class.getResourceAsStream("foo.properties"); 
+1

需要注意的是,如果你使用'的getClass()',而不是一類的文字,有趣的事情可以在子類的存在下發生(你可能會得到與你想象的不同的包)。 – Thilo

2

訪問屬性文件,該文件是從靜態方法usign項目類路徑 getClass嘗試,如:

import java.io.InputStream; 
import java.util.Properties; 
import java.io.IOException; 
public class HelperClass { 
    public static String getProperty() { 
     Properties properties = new Properties(); 
     String wadlURI = ""; 
      try { 
       InputStream inputStream = HelperClass.class.getClassLoader().getResourceAsStream("configuration.properties"); 
       properties.load(inputStream); 
       wadlURI = properties.getProperty("wadlurl"); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return wadlURI; 
     } 
}