2014-12-05 2 views
0

클래스 A의 단일 입력을 받고 인스턴스에 고유 한 id이 지정되어있는 정적 유틸리티 메서드를 만들려고 시도 중이며 특정 id이 있는지 여부를 설명하는 boolean 값을 검색합니다. 특성이 적용됩니다. 관계를 설명 할 패턴이 없습니다. 수식없이 마음에 먼저 들었던 두 가지 옵션은 모두 id 또는 "또는"|| 테스트 문자열을 포함하는 static final int[]입니다. 밖에 다른 옵션이 더 좋습니까? 아니면 하나를 다른 옵션보다 우선적으로 사용할 수 있습니까? 이 작업은 큰 위업은 아니지만 간단하고 읽기 쉽도록하고 싶습니다.미리 정의 된 조건의 배열 저장

다음은 내가 무슨 뜻인지에 대한 일반적인 아이디어를 얻을 수 있도록 샘플입니다 :

public class UtilitiesA { 

    // first method of retrieval- static storage array 
    private static int[] validIds = { 
     A.instanceM.id, A.instanceZ.id, A.instanceL.id, A.instanceF.id, A.instanceP.id 
    }; 

    public static boolean getHasCharacteristic(A input) { 
     for (int id : validIds) if (a.id == id) return true; 
     return false; 
    } 
    // vs the second method... 
    public static boolean getHasCharacteristic2(A input) { 
     return (input.id == A.instanceM.id || 
       input.id == A.instanceZ.id || 
       input.id == A.instanceL.id || 
       input.id == A.instanceF.id || 
       input.id == A.instanceP.id) 
    } 
} 

두 번째는 내가 생각보다 직관적뿐만 아니라 더 반복한다. 어떤 제안이라도 대단히 감사 할 것입니다.

답변

0

방법에 대해 : 당신이하지 않도록

private static Integer[] validIds = { 
    A.instanceM.id, A.instanceZ.id, A.instanceL.id, A.instanceF.id, A.instanceP.id 
}; 

public static boolean getHasCharacteristic3(A input) { 
     return Arrays.asList(validIds).contains(input.id) 
    } 

자주이 호출 될려고하는 경우에, 당신은 단지 배열 대신 처음에 목록에있는 모든 ID를 저장할 수 배열을 List로 변환 해, List의 contains 메소드를 사용합니다.

배열에 보관하는 경우 int가 아닌 정수 배열이어야합니다.

+0

예, 20Hz에서주기 당 약 0-10 회 실행되므로 다소 자주 실행됩니다. 나는 결국 데이터를 목록으로 저장하게 될지도 모른다. – vbee

+0

첫 번째 옵션은 똑같이 유효하며 한 줄로 호출 할 수 있다는 점을 제외하면 더 좋거나 나 빠를 수 있습니다. –

+0

나는 List.contains가 "두포 (Under the Hood)"라고 부르는 것이 무엇인지 알아 내려고 노력할지도 모르는 간결함을 좋아한다. – vbee

0

두 번째 코드는 간단하게 보이지만 validIds의 내용이 더 많은 경우 코드를 작성하는 데 불편할 수 있습니다. 그 배열 안의 모든 값에 대해 확인해야합니다. 내용의 수가 더 많으면 하나 또는 다른 값이 누락 될 수 있습니다. 따라서 첫 번째 구현에서 완료 한 것처럼 for 루프를 사용하여 반복해야합니다.

관련 문제