XPath를 사용하여 응용 프로그램의 데이터 모델에 액세스 할 수있는 Jaxen (Java 용 XPath 라이브러리) 용 어댑터를 구현하고 있습니다.
이것은 문자열을 Jaxen에서 우리에게 전달한 클래스를 데이터 모델의 요소로 매핑하는 클래스를 구현하여 수행됩니다. 총 1000 개의 문자열 비교를 통해 약 100 개의 클래스가 필요하다고 추정합니다.
이 작업을 수행하는 가장 좋은 방법은 각 문자열을 상수로 정의하는 것이 아니라 코드에 직접 작성된 문자열을 가진 간단한 if / else 문이라고 생각합니다. 예를 들면 다음과 같습니다.
public Object getNode(String name) {
if ("name".equals(name)) {
return contact.getFullName();
} else if ("title".equals(name)) {
return contact.getTitle();
} else if ("first_name".equals(name)) {
return contact.getFirstName();
} else if ("last_name".equals(name)) {
return contact.getLastName();
...
그러나 나는 항상 문자열 값을 코드에 직접 포함시키지 말고 대신 문자열 상수를 만들어야한다고 배웠습니다. 다음과 같이 보일 것입니다.
private static final String NAME = "name";
private static final String TITLE = "title";
private static final String FIRST_NAME = "first_name";
private static final String LAST_NAME = "last_name";
public Object getNode(String name) {
if (NAME.equals(name)) {
return contact.getFullName();
} else if (TITLE.equals(name)) {
return contact.getTitle();
} else if (FIRST_NAME.equals(name)) {
return contact.getFirstName();
} else if (LAST_NAME.equals(name)) {
return contact.getLastName();
...
이 경우 나는 그것이 나쁜 생각이라고 생각합니다. 이 방법에서는 상수가 한 번만 사용됩니다 getNode()
. 상수를 사용하는 것만 큼 문자열을 직접 사용하는 것은 읽기 쉽고 이해하기 쉽고 최소한 1000 줄의 코드를 작성하는 것을 막아줍니다.
따라서 일회용으로 문자열 상수를 정의 해야하는 이유가 있습니까? 아니면 문자열을 직접 사용하는 것이 허용됩니까?
추신. 누군가 열거 형 대신을 제안하기 전에 프로토 타입을 프로토 타입으로 만들었지 만 열거 형 변환은 간단한 문자열 비교보다 15 배 느리므로 고려하지 않습니다.
결론 : 아래 답변은 문자열 상수 이상 으로이 질문의 범위를 확장 했으므로 두 가지 결론이 있습니다.
- 그것은,이 시나리오에서 문자열을 직접이 아닌 문자열 상수를 사용하는 것이 아마 OK입니다 만
- 문자열을 사용하지 않는 방법이 더 좋을 수도 있습니다.
따라서 문자열을 완전히 피하는 래퍼 기술을 시도해 보겠습니다. 불행히도 우리는 아직 Java 7을 사용하지 않기 때문에 string switch 문을 사용할 수 없습니다. 궁극적으로 우리에게 가장 좋은 대답은 각 기술을 시도하고 그 성능을 평가하는 것입니다. 실제로 하나의 기술이 더 빠르면 아름다움이나 컨벤션 준수 여부에 관계없이 기술을 선택할 것입니다.
switch
레이블 로 사용할 수 있습니다 . if
캐스케이드 대신 스위치를 사용하십시오 .