2013-08-23 44 views
1

我想參數保存爲一個屬性,參數爲:testSpeed (= "20"),我有一個方法:如何獲取Java中參數的字符串值?

saveProperty(String Parameter) 

將參數的值保存到一個文件中,這樣的事情:

saveProperty(testSpeed); 

我的屬性文件看起來是這樣的:

testSpeed : 20 
testHeight : 300 

我的問題是:在Java中是有可能得到的參數的名稱在這種情況下傳遞給saveProperty()參數是testSpeed,它的名字是"testSpeed",如何從saveProperty()內得到這個字符串,所以我不必做以下保存:

saveProperty(String Name,String Value); 

和這樣稱呼它:

saveProperty("testSpeed",testSpeed) 

此外,當我需要從屬性文件把它弄出來,我可以打電話:

getProperty(testSpeed) 

我知道如何使用屬性文件,我只是用它作爲例子,也許它引起了一些混淆,當我提到屬性文件。

問題的實質是:如何獲取傳入方法的參數的名稱。

void someMethod(String Parameter_XYZ) 
{ 
    // In here if I call someMethod(testSpeed), how to get the string "testSpeed", 
    // not it's value, but it's name, 
    // exactly spelled as "testSpeed" ? 
} 

這是可行的在Java中?

回答

1

屬性文件的正確格式的第一個是這樣的:

testSpeed=20 
testHeight=300 

現在要從這個拉任何屬性,你需要傳遞鍵名,你已經在做saveProperty(String name, String value)方法。但是,如果我正確理解你的問題,那麼你想避免傳遞屬性名稱。根據您的編輯問題:你可以有這樣一些自定義的方法:

void saveTestSpeed(String value) { 
    saveProperty("testSpeed", value); 
} 

Strig getTestSpeed() { 
    getProperty("testSpeed"); 
} 

編輯。

不,在Java中是不可能的。

請記住,Java嚴格按值傳遞,這使得無法在被調用者的末端找出實際變量名的名稱。在saveProperty方法中,我們只能得到參數的值,因爲在Java中,對象引用是通過值而不是名稱傳遞的。

這是不實際的,因爲也沒有什麼是停止方法被調用,如:

savePropery("20"); 

在應該是什麼屬性的名稱時?

+0

你需要爲'testHeigh'分開設置getter/setter(這當然不推薦用於100個屬性的屬性文件) – anubhava

+0

@ Alya'aGamal:在這裏如何使用正則表達式? – anubhava

+0

@ Alya'aGamal:我認爲這只是一個例子來說明testSpeed的價值。 OP想要使用這個代碼:**'testSpeed = 20; saveProperty(testSpeed);'** – anubhava

0

我建議保持鍵值對實現更通用的解決方案。您可以使用Properties

void saveProperty(String key, String value) { 

    properties.setProperty(key, value); 
} 

使用getProperty檢索

properties.getProperty(key) 
1

使用Properties

public class Util 
{ 
    private static final Properties prop = new Properties(); 

    static 
    { 
     try 
     { 
      prop.load(new FileReader(new File("prop.txt"))); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public static void setProperty(String key, String value) 
    { 
     prop.setProperty(key, value); 
     persistCurrentProperites(); 
    } 

    public static String getProperty(String key) 
    { 
     return prop.getProperty(key); 
    } 

    private static void persistCurrentProperites() 
    { 
     try 
     { 
      prop.store(new FileWriter(new File("prop.txt")), null); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 
相關問題