현재 Java에서 약 30 개의 다른 매개 변수를 입력해야하는 시뮬레이션을 구현 중입니다. 결국, 파일과 GUI에서이 매개 변수를 읽을 수 있기를 원하지만, 지금은 파일 입력에만 초점을 맞추고 있습니다. 내 시뮬레이션에는 다른 유형의 매개 변수가 필요합니다. 문자열, int 및 복식이며 현재 시뮬레이션을위한 필드로 사용하고 있습니다.Java에서 변수 유형을 사용하여 매개 변수 관리를 효율적으로 코딩
private String simName;
private int initialPopulationSize;
private double replacementRate;
이러한 매개 변수 내가 배열에 저장할 수없는 모두 같은 유형이 아니며 내가 따로 코드의 약 30 배를 같은 종류를 사용하여 하나 하나를 읽을 수 있기 때문에. 세 개의 매개 변수의 예 :
//scanner set up and reading each line, looking for "(key)=(param)" regex matches
//if statement to check each param name against the key matched in file. Store param in that field if the name matches.
String key = m.group(1);
if (key.equals(PKEY_SIM_NAME)) {
if (simNameSet) {
throw new IllegalStateException("multiple values for simulation name");
}
this.simName = m.group(2);
simNameSet = true;
} else if (key.equals(PKEY_INITIAL_SIZE)) {
if (initialSizeSet) {
throw new IllegalStateException("multiple values for initial population size");
}
this.initialPopulationSize = Integer.parseInt(m.group(2));
initialPopulationSize = true;
} else if (key.equals(PKEY_MUT_REPLACEMENT)) {
if (replacementRateSet) {
throw new IllegalStateException("multiple values for replacement rate");
}
this.replacementRate = Double.parseDouble(m.group(2));
replacementRateSet = true;
}
//Add nauseum for each parameter.....
그래서 나는 현재 매개 변수를 읽기 위해 길고 unweildly 방법이 있고, 나는 가능성이 GUI에서 읽기 위해 다시 동일한 작업을 수행해야합니다.
제가 생각한 최선의 대안은 모든 것을 String 필드로 먼저 읽는 것입니다. 그렇게하면지도를 사용하여 읽는 간단한 몇 줄을 쓸 수 있습니다. 이 (테스트되지 않은 코드) 같은 것을 : 그것은 내가 사용하여 원하는 목적지 나는 비 문자열 PARAMS 캐스팅 할 때마다 것 때문에지도에서 이러한 매개 변수를 사용하여 올 때
//This time with a paramMap<String, String>, scanner set up as before
if (!paramMap.containsKey(key)) {
paramMap.put(key, m.group(2));
}
else{
throw new IllegalStateException("multiple values for initial population size");
}
그러나이 불편 될 것입니다 그들.
이 시점에서 나는 이것이 내 최선의 접근 방법이라고 생각합니다. 내가 경험하기 전에 좀 더 경험이 많은 사람이 이런 상황을 처리하기위한 더 나은 전략을 제시 할 수 있는지 알고 싶습니다.
30 개의 매개 변수를 개별 개체로 재구성 할 수 있습니까? Spring을 사용하는 접근법을 살펴보십시오. 여기서 매개 변수를 xml 파일에 넣을 수 있습니다.이 매개 변수는 각 매개 변수의 객체 유형을 언급하고 Spring에 의존하여 Bean에로드합니다. 훨씬 더 깔끔하게. 물론 입력 구성 파일의 구조를 제어 할 수 없다면이 아이디어는 유용하지 않을 수 있습니다. –
이것은 내가 생각하지 못한 것입니다. 그러나 의도적으로 입력 파일을 가능한 한 단순하게 만들었습니다. (문자순으로 각 줄마다 [key] = [value] 만 입력하면됩니다.) 따라서 누구나 자신의 시뮬레이션을 만들 수 있습니다. 그러나 일단 gui (사용자가 자신의 파일을 만드는 대신 gui 만 사용할 수 있다고 가정하면) 이것은 매개 변수 집합을 저장하기위한 좋은 옵션이 될 수 있으므로 시뮬레이션을 신속하게 다시로드 할 수 있습니다. – MattLBeck