+142
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
/**
* Конфигурация программы
*
* 2 конструктора:
- по умолчанию - загружающий данные из файла настроек (см. Configuration.CONFIGURATION_FILENAME);
- с одним параметром java.util.Properties - загружающий данные данные из него.
- метод save()
- без параметра - записывает данные в Configuration.CONFIGURATION_FILENAME
- с одним параметром java.util.Properties - записывает данные в него.
*/
public class Configuration {
public static final String CONFIGURATION_FILENAME = System.getProperty("user.home") + "/serialmon/1.properties";
private PortConfig firstPort;
private PortConfig secondPort;
private String logFileName;
private int logWidth;
public Configuration() {
this.firstPort = new PortConfig();
this.secondPort = new PortConfig();
Properties pp = new Properties();
try {
File PropFile = new File(CONFIGURATION_FILENAME);
if (!PropFile.exists()) {
PropFile.createNewFile();
}
FileInputStream inPropFile = new FileInputStream(CONFIGURATION_FILENAME);
pp.load(inPropFile);
setProperties(pp);
} catch (IOException e) {
e.printStackTrace();
}
}
public Configuration(Properties p) {
this.firstPort = new PortConfig();
this.secondPort = new PortConfig();
setProperties(p);
}
/**
* вспомогательный метод. В идеале можно было обойтись без него, вызывая из конструктора по умолчанию
* конструктор с параметром Properties, но ПЕРЕД вызовом этого конструктора нужно было
* загрузить данные из файла в Properties pp, а потом уже вызвать конструктор.
* Это сделать не возможно, т.к. вызов конструктора должен быть ПЕРВЫМ.
*
* @param pp
*/
private void setProperties(Properties pp){
this.setLogFileName(pp.getProperty("logFileName"));
this.setLogWidth(Integer.parseInt(pp.getProperty("logWidth")));
}
/**
* - метод save()
* без параметра - записывает данные в Configuration.CONFIGURATION_FILENAME
*/
public void save() {
Properties pp = new Properties();
save(pp);
try {
FileOutputStream outPropFile = new FileOutputStream(CONFIGURATION_FILENAME);
pp.store(outPropFile, null);
} catch(IOException ex) {
ex.printStackTrace();
}
}
/**
* - с одним параметром java.util.Properties - записывает данные в него.
*
* @param p
*/
public void save(Properties p) {
p.put("logFileName", this.getLogFileName());
p.put("logWidth", String.valueOf(this.getLogWidth()));
}
Товарищи, возникла необходимость создания двух конструкторов. Хочется вызвать один из другого, чтобы было красиво, НО перед вызовом второго, который с параметром Properties, нужно установить этот самый параметр, а потом уже передать его.
Т.е. нужно в конструкторе по умолчанию сделать такое:
Properties p = new Properties();
p.set(бла бла бла);
THIS(P); // как вы понимаете, компилятор будет ругаться, что вызов THIS должен быть ПЕРВЫМ в конструкторе.
вызов типа this(new Properties), не годится.
сейчас, как можно видеть, использую вспомогательный метод setProperties, как раз без которого было бы идеально.
Запостил: kikis,
18 Марта 2012
0rt 19.03.2012 02:00 # +6
kikis 19.03.2012 09:30 # 0
0rt 19.03.2012 09:40 # +1
tir 19.03.2012 07:38 # +1
и тогда сможешь сделать
Lure Of Chaos 19.03.2012 11:01 # 0
элегантным решением была бы именно фабрика.
kikis 19.03.2012 16:29 # 0
roman-kashitsyn 19.03.2012 09:39 # 0
roman-kashitsyn 19.03.2012 11:11 # +1
луна в матроске
Lure Of Chaos 19.03.2012 16:33 # 0
3.14159265 19.03.2012 14:55 # 0
Просто перестань писать на яве.