picocli를 사용하여 여러 유형의 옵션을 처리하는 방법

선박

picocli를 사용하도록 기존 애플리케이션을 변환하고 있습니다. 기존 옵션 중 하나는 다음과 같습니다.

-t, --threads           [1, n] for fixed thread pool, 'cpus' for number of cpus, 'cached' for cached

이를 통해 옵션은 양의 정수 또는 몇 가지 특수 문자열 중 하나가 될 수 있습니다. 기존 코드는이를 문자열로 취급하고 특수 문자열 중 하나가 아닌 경우 Integer.parseInt.

물론 picocli로도 똑같은 일을 할 수 있지만, 이것을 처리하는 더 좋은 방법이 있는지 궁금합니다. 예를 들어, 동일한 옵션에 대해 여러 필드를 사용할 수 있으며 전달 된 내용에 따라 적절한 필드를 채울 수 있습니까? 또한 가능한 문자열 옵션에 대해 열거 형을 사용할 수 있습니다.

렘코 팝마

한 가지 아이디어는 ThreadPoolSize고정 된 숫자 값이나 동적 값에 대한 열거 형을 캡슐화 하는 클래스를 만드는 것 입니다. 이 데이터 형식에 대한 사용자 지정 변환기를 만들어야합니다.

그런 다음 다음과 같이 옵션을 정의 할 수 있습니다.

@Option(names = { "-t", "--threads" }, converter = ThreadPoolSizeConverter.class,
  description = "[1, n] for fixed thread pool, 'cpus' for number of cpus, 'cached' for cached")
ThreadPoolSize threadPoolSize;

스레드 풀 크기 및 변환기에 대한 사용자 정의 데이터 유형은 다음과 같습니다.

class ThreadPoolSize {
    enum Dynamic { cpus, cached }

    int fixed = -1;  // if -1, then use the dynamic value
    Dynamic dynamic; // if null, then use the fixed value
}

class ThreadPoolSizeConverter implements CommandLine.ITypeConverter<ThreadPoolSize> {

    @Override
    public ThreadPoolSize convert(String value) throws Exception {
        ThreadPoolSize result = new ThreadPoolSize();
        try {
            result.fixed = Integer.parseInt(value);
            if (result.fixed < 1) {
                throw new CommandLine.TypeConversionException("Invalid value " +
                        value + ": must be 1 or more.");
            }
        } catch (NumberFormatException nan) {
            try {
                result.dynamic = ThreadPoolSize.Dynamic.valueOf(
                        value.toLowerCase(Locale.ENGLISH));
            } catch (IllegalArgumentException ex) {
                throw new CommandLine.TypeConversionException("Invalid value " +
                        value + ": must be one of " + 
                        Arrays.toString(ThreadPoolSize.Dynamic.values()));
            }
        }
        return result;
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

mechanize 및 bs4를 사용하여 웹 페이지의 여러 옵션을 변경하는 방법

분류에서Dev

Spring Batch를 사용하여 여러 CSV 형식 파일을 처리하는 방법

분류에서Dev

XSL을 사용하여 병합 한 후 여러 XML 파일의 모든 데이터를 처리하는 방법

분류에서Dev

Gson을 사용하여 여러 유형의 페이로드를 구문 분석하는 방법

분류에서Dev

공유 라이브러리를 사용할 때 EAL 옵션을 사용하여 DPDK 드라이버를 지정하는 방법은 무엇입니까?

분류에서Dev

RTypeProvider를 사용하여 여러 유형의 데이터 프레임을 만드는 방법

분류에서Dev

RxJS를 사용하여 다른 액션 스트림에 의해 옵저버 블을 트리거하는 방법

분류에서Dev

유형 매개 변수를 사용하여 튜플의 유형을 처리하는 방법은 무엇입니까?

분류에서Dev

-execdir 옵션을 사용하여 {} 및 +를 찾는 방법

분류에서Dev

-execdir 옵션을 사용하여 {} 및 +를 찾는 방법

분류에서Dev

SFINAE를 사용하여 C ++ 11의 여러 옵션에서 생성자를 선택하는 방법

분류에서Dev

HL7-dotnetcore를 사용하여 VARIES 데이터 유형을 처리하는 방법은 무엇입니까?

분류에서Dev

여러 옵션 SQL로 사용자를 제외하는 방법

분류에서Dev

여러 줄로 grep하고 -A 옵션을 사용하는 방법

분류에서Dev

동일한 컬렉션을 공유하는 여러 마리오네트 CollectionView를 처리하는 방법

분류에서Dev

이 모든 충돌을 포착하는 코드를 사용하여 단일 유형의 충돌 만 처리하는 방법

분류에서Dev

여러 데이터 프레임의 문자열을 일치시키고 AND 및 OR 옵션을 사용하여 인덱스를 반환하는 방법

분류에서Dev

Robotium을 사용하여 다른 ListView를 처리하는 방법

분류에서Dev

레이블 옵션을 사용하여 여러 네임 스페이스를 삭제하는 방법

분류에서Dev

CSS를 사용하여 옵션 요소에 대한 여러 배경 조합을 설정하는 방법

분류에서Dev

속성 파일을 사용하여 하나의 로거에 동일한 유형의 여러 어 펜더를 사용하는 방법은 무엇입니까?

분류에서Dev

WordPress의 옵션 선택을 사용하여 사용자 정의 메뉴를 만드는 방법

분류에서Dev

리플렉션을 사용하여 모든 유형을 처리하는 방법은 무엇입니까?

분류에서Dev

하나의 일반 위치 방법을 사용하는 여러 유형

분류에서Dev

Make를 사용하여 동일한 방식으로 여러 파일 유형을 컴파일하는 방법

분류에서Dev

하나의 인터럽트를 사용하여 여러 버튼의 입력을 처리하는 방법은 무엇입니까?

분류에서Dev

여러 옵션을 하나의 변수로 보내는 방법

분류에서Dev

Numeric [T]를 사용하여 숫자 유형의 0을 나타내는 방법

분류에서Dev

SQL을 사용하여 유형별 항목의 %를 얻는 방법

Related 관련 기사

  1. 1

    mechanize 및 bs4를 사용하여 웹 페이지의 여러 옵션을 변경하는 방법

  2. 2

    Spring Batch를 사용하여 여러 CSV 형식 파일을 처리하는 방법

  3. 3

    XSL을 사용하여 병합 한 후 여러 XML 파일의 모든 데이터를 처리하는 방법

  4. 4

    Gson을 사용하여 여러 유형의 페이로드를 구문 분석하는 방법

  5. 5

    공유 라이브러리를 사용할 때 EAL 옵션을 사용하여 DPDK 드라이버를 지정하는 방법은 무엇입니까?

  6. 6

    RTypeProvider를 사용하여 여러 유형의 데이터 프레임을 만드는 방법

  7. 7

    RxJS를 사용하여 다른 액션 스트림에 의해 옵저버 블을 트리거하는 방법

  8. 8

    유형 매개 변수를 사용하여 튜플의 유형을 처리하는 방법은 무엇입니까?

  9. 9

    -execdir 옵션을 사용하여 {} 및 +를 찾는 방법

  10. 10

    -execdir 옵션을 사용하여 {} 및 +를 찾는 방법

  11. 11

    SFINAE를 사용하여 C ++ 11의 여러 옵션에서 생성자를 선택하는 방법

  12. 12

    HL7-dotnetcore를 사용하여 VARIES 데이터 유형을 처리하는 방법은 무엇입니까?

  13. 13

    여러 옵션 SQL로 사용자를 제외하는 방법

  14. 14

    여러 줄로 grep하고 -A 옵션을 사용하는 방법

  15. 15

    동일한 컬렉션을 공유하는 여러 마리오네트 CollectionView를 처리하는 방법

  16. 16

    이 모든 충돌을 포착하는 코드를 사용하여 단일 유형의 충돌 만 처리하는 방법

  17. 17

    여러 데이터 프레임의 문자열을 일치시키고 AND 및 OR 옵션을 사용하여 인덱스를 반환하는 방법

  18. 18

    Robotium을 사용하여 다른 ListView를 처리하는 방법

  19. 19

    레이블 옵션을 사용하여 여러 네임 스페이스를 삭제하는 방법

  20. 20

    CSS를 사용하여 옵션 요소에 대한 여러 배경 조합을 설정하는 방법

  21. 21

    속성 파일을 사용하여 하나의 로거에 동일한 유형의 여러 어 펜더를 사용하는 방법은 무엇입니까?

  22. 22

    WordPress의 옵션 선택을 사용하여 사용자 정의 메뉴를 만드는 방법

  23. 23

    리플렉션을 사용하여 모든 유형을 처리하는 방법은 무엇입니까?

  24. 24

    하나의 일반 위치 방법을 사용하는 여러 유형

  25. 25

    Make를 사용하여 동일한 방식으로 여러 파일 유형을 컴파일하는 방법

  26. 26

    하나의 인터럽트를 사용하여 여러 버튼의 입력을 처리하는 방법은 무엇입니까?

  27. 27

    여러 옵션을 하나의 변수로 보내는 방법

  28. 28

    Numeric [T]를 사용하여 숫자 유형의 0을 나타내는 방법

  29. 29

    SQL을 사용하여 유형별 항목의 %를 얻는 방법

뜨겁다태그

보관