2013-06-05 55 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