public Params(Params other) { // copy values from other debug = other.debug; verbose = other.verbose; ignoreVParams = other.ignoreVParams; stopLevel = other.stopLevel; Species = other.Species; WoodType = other.WoodType; Seed = other.Seed; Smooth = other.Smooth; // create paramDB paramDB = new Hashtable(); levelParams = new LevelParams[4]; for (int l = 0; l < 4; l++) { levelParams[l] = new LevelParams(l, paramDB); } registerParams(); // copy param values for (Enumeration e = paramDB.elements(); e.hasMoreElements(); ) { AbstractParam p = ((AbstractParam) e.nextElement()); try { AbstractParam otherParam = other.getParam(p.name); if (!otherParam.empty()) { p.setValue(otherParam.getValue()); } // else use default value } catch (ParamError err) { System.err.println("Error copying params: " + err.getMessage()); } } }