2013-06-05 53 views
0

我的程序讀取的是一個帶有5個單元參數的文件。 我用這些參數建立了一個單元類,但是現在被要求能夠讀取另一個文件,這個文件有6個參數,但它讓我想到如果我能得到一個具有10個參數的文件,並且我的單元類不會是準備存儲所有的數據,所以我想知道如果我可以在運行時將更多的變量添加到類中。運行時編輯類

樣品

單元類

public class Unit implements Serializable { 

    private String name; 
    private String unitId; 
    private byte year; 
    private String semester; 
    private String type; 
    private int credits; 

    public Unit(String name, String unitId, byte year, String semester, int credits) { 
     setName(name); 
     setUnitId(unitId); 
     setYear(year); 
     setSemester(semester); 
     setType(null); 
     setCredits(credits); 
    } 

    public Unit(String name, String unitId, byte year, String semester, String type, int credits) { 
     setName(name); 
     setUnitId(unitId); 
     setYear(year); 
     setSemester(semester); 
     setType(type); 
     setCredits(credits); 
    } 
    // Set's get's and all that stuff. 

} 

示例代碼讀取文件

Scanner input = new Scanner(f); 
ArrayList<Unit> units = new ArrayList(); 
while (input.hasNext()) { 
    String str = input.nextLine(); 
    if (ignoreFirstLine) { 
     ignoreFirstLine = false; 
    } else { 
     String[] ArrayStr = str.split(";"); 
     if(ArrayStr.length == 5){ 
      Unit unit = new Unit(ArrayStr[0], ArrayStr[1], Byte.parseByte(ArrayStr[2]), ArrayStr[3], Integer.parseInt(ArrayStr[4])); 
      units.add(unit); 
     } else if (ArrayStr.length == 6){ 
      Unit unit = new Unit(ArrayStr[0], ArrayStr[1], Byte.parseByte(ArrayStr[2]), ArrayStr[3], ArrayStr[4], Integer.parseInt(ArrayStr[5])); 
      units.add(unit); 
     } else { 
      //Modify classes in Runtime? 
     } 

編輯:我的英語很不錯:d

+0

'Builder'設計模式是一個不錯的選擇。它處理具有一些必需參數和一些可選參數的對象。 – Sam

回答

2

,所以我在想,如果我可以在運行時將更多變量添加到類中

不可以。在Java中,不能將新變量插入已編譯的程序。 如果您不確定參數(及其類型)的可用性,請嘗試將它們存儲在Collection中(例如,HashMap<Long, Object>)。

else { 
       HashMap<Long, Object> map = new HashMap<>(); 
       for(int i = 6; i < ArrayStr.length; i++) 
        //add items here 

        Unit unit = new Unit(ArrayStr[0], 
             ArrayStr[1], 
             Byte.parseByte(ArrayStr[2]), 
             ArrayStr[3], 
             ArrayStr[4], 
             Integer.parseInt(ArrayStr[5]), 
             map); 
        units.add(unit); 
} 

請注意,您將不得不更改您的constructor

否則,你必須改變你的設計。你可以檢查這個thread

+0

謝謝!我想我正在採取不同的方法來解決問題 – MikeNeto

+0

不客氣=) – user2336315