2014-02-19 20 views
1

我的程序加載信息,並創建一個對象與信息無論是整數或字符串數​​組之間。的Java返回一個int或字符串(未知的返回類型)從文本文件

我然後希望對象返回一個字符串或根據對象是否保持一個整數值或字符串值的整數。

編輯... 因此,這裏是我的類型類,如果文本文件中的字段是數字,則保存int類型,如果字段是單詞,則保存該類型,並將其保存在Type數組中。

public class Type { 

    private String name; 
    private int value; 

    public Type(String name) { 
     this.name = name; 
    } 

    public Type(int value) { 
     this.value = value; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public int getValue() { 
     return this.value; 
    } 

    public boolean isInt() { 
     boolean isInt = false; 
     if (this.value != 0) { 
     isInt = true; 
     return isInt; 
     } 
     return isInt; 
    } 

} 

所以在我的數組可能是一個Int或字符串,我想返回數據類型沒有任何長的語句在我的主類。

+5

祝我的朋友。 – Maroun

+0

你到目前爲止嘗試過什麼? –

+0

我們想幫助你,但沒有一個具體的問題,我們什麼都做不了。請發佈您的代碼(無論是否工作),並指定確切的問題。 – Maroun

回答

2

如果嚴格只想得到的具體數值,可以一個方法添加到您的Type類和獲取值從這個方法,醜陋但你想要做什麼:

public <T> T getDynamicValue(Type t) { 
    if (isInt()) { 
      return (T) ((Integer) t.getValue()); 
    } else { 
      return (T) t.getName(); 
    } 
} 

使用它:

List<Type> dynamicList = Arrays.asList(new Type[]{new Type(1), new Type(2), new Type("dog")}); 
for (Type t : dynamicList) { 
    System.out.println("T -> " + t.getDynamicValue(t)); 
} 

如果要使用此數據執行一些操作,你必須做出一個instanceof檢查和鑄造它,比如一些拆分(或字符串的方法)的名稱值...

1

你不能選擇對象的類型在運行時返回。您唯一的選擇是返回Object。您可以檢查它是否使用此代碼是一個Stringint,例如:

if(object instanceof String) { 
    //... it's a string 
} 
else { 
    //...otherwise it's an int 
} 
1

如果你正在讀所有投入字符串的情況下,你將需要測試的值對Integer.parseString(值)來查找如果它實際上是一個整數。

1

你可以嘗試將對象轉換成Integer,趕上ClassCastException

try { 
    int i = (Integer) object; 
} 
catch (ClassCastException e){ 
    String s = (String) object; 
} 
+0

我認爲使用'instanceof'會更好,而不是捕獲異常 – user902383

1

當我有這種類型的問題,我有時通過解決問題並使用回調式解決方案解決問題。

例如:

for (Type t : array) { 
    t.process(callback); 
} 

凡回調看起來是這樣的:

interface Callback { 
    public void processInt(....); 
    public void processString(....); 
} 

然後,您可以執行過程方法要麼被if (isInt()) callback.processInt() else callback.processString(),或者如果你改變Type定義你可以使用繼承樹爲你做。

例如:

interface Type { 
    public void process(Callback cb); 
} 

class IntType implements Type { 
    public void process(Callback cb) { 
    cb.processInt(...); 
    } 
} 

class StringType implements Type { 
    public void process(Callback cb) { 
    cb.processString(...); 
    } 
} 
相關問題