2012-02-12 22 views
0

我有一個地方屬性文件包含以下格式的Java轉換文字對象

name=abc#$#String 
age=23#$#Integer 

當值鑄造數據的應用程序,之後#$#將其轉換爲數值。是否有可能做到這一點,而不使用開關或如果然後else語句。

我想要做的是將字符串String或Integer轉換爲對象並且能夠在不使用if then else塊的情況下轉換該值。這種東西

String[] tmp = props.getProperty("name").split("#$#"); 
String name = (tmp[1])tmp[0]; 
+0

爲什麼不簡單地輸入name = abc和age = 23? – 2012-02-12 00:03:35

+2

你的代碼片段對我來說不太合理:如果你足夠了解'String name',那麼你必須已經知道它將是一個'String',所以不需要'(tmp [ 1])'符號。沒有? – ruakh 2012-02-12 00:06:00

+0

您不能將變量用作轉換說明符。 – Perception 2012-02-12 00:30:24

回答

1

首先,您不能將一個String對象轉換爲Integer對象;字符串不是Integer的子類。但是,您可以將字符串文字轉換爲對象並將其轉換爲對象:

Class.forName("some.package.name.SomeClass").cast(aSubclass); 

但是,上述內容仍適用。您將無法將「23」字符串轉換爲整數。

它看起來像你在想這一點。這可能與if語句或者也許是Factory方法一樣簡單,反之最終也會做同樣的事情。

此外,我會假設您事先知道對象類型,因爲您不打算將名稱映射到整數。在這種情況下,你可能會做亞歷山大羅斯所說的。

+0

我想我不是很好,並描述我的問題,但Class.forName(「some.package.name.SomeClass」)。cast(aSubclass);應該幫助我解決我的問題。謝謝 – user373201 2012-02-12 17:27:59

0

我不知道我是否理解你的問題。首先,我認爲使用拆分方法會讓事情變得更加複雜。既然你知道你的值包含#$#,你可以用空字符串替換它們。 其次,因爲你知道(我假設),在你的屬性文件,你有一個屬性稱爲name,且類型爲字符串和屬性年齡是整數,你可以做以下的(沒有,如果別的勾選需要)

String name = props.getProperty("name").replace("$#$", ""); 
    Integer age = Integer.parseInt(props.getProperty("age").replace("$#$", "")); 

這是你在找什麼?

+0

我只是簡單的例子。代碼不知道屬性文件的內容。它接收插入查詢以及屬性文件中的列和值。代碼遍歷整個屬性列表,然後將其插入到數據庫中。我可以使用像if(「String」)then(String)name else if(「Integer」)然後.....我在想,如果我可以避免它,並以某種方式使用反射或別的東西投下一個值 – user373201 2012-02-12 00:45:03

+0

我是對不起,還是不明白。代碼遍歷一系列屬性,然後是什麼? 當你迭代屬性文件時,你有鍵和值。你如何確定該值是字符串還是整數? – alexandros 2012-02-12 01:14:50