2016-10-12 9 views
1

나는 컴파일 타임 상수 String을 필요로하는 annotation을 가지고 있는데 그것들 중 하나에서 컴파일 타임 상수 int로 초기화하고 싶다. 내가 사용하는 도서관들.컴파일 타임 상수 int를 자바의 컴파일 타임 상수 String으로 변환

public class LibraryClass { 
    public static int CONSTANT_INT = 0; //Where 0 could be whatever 
} 

public class MyClass { 
    private static final String CONSTANT_STRING = "" + LibraryClass.CONSTANT_INT; 

    @AnnotationThatNeedsString(CONSTANT_STRING) 
    public void myMethod() { 
     //Do something 
    } 
} 

내 질문에, 컴파일 시간 상수 문자열을 "" + PRIMITIVE_TO_CONVERT을 사용하는 것보다 프리미티브를 변환하는 더 나은 방법이있다 : 그래서 내가하고 결국 무엇을이 같은입니까? 프리미티브를 String으로 "캐스팅"하는 방법은 무엇입니까? 이런 식으로하는 것이 조금 이상하다고 느껴지기 때문입니다.

답변

1

주석에 "컴파일 타임 상수"값이 필요하다고 올바르게 판단 했으므로 현재 솔루션이 가장 적합하다고 생각합니다. "" + INT_VALUE은 라이브러리에서 값을 반복하여 중복성을 작성하는 것보다 적어도 좋지만 문자열 ("23")으로, 그리고 솔루션을 컴파일 타임 상수로 결정하는 "좋은"Java 기능입니다.

가능하다면 다른 매개 변수에서 제안한 것처럼 값 매개 변수로 int를 사용하도록 주석을 변경할 수도 있습니다 (단, 주석은 라이브러리에서도 제공됩니다).

0

String.valueOf (LibraryClass.CONSTANT_INT)를 사용해보십시오.

+1

그러나 주석 내에서 직접 사용할 수 없으며 CONSTANT_STRING 초기화에서만 사용할 수 있습니다. –

+0

"개인 정적 최종 문자열입니다. CONSTANT_STRING = String.valueOf (LibraryClass.CONSTANT_INT);" 해당 사항 없음 – Anthony

+0

네, 그게 작동하며 정답입니다. 그러나 질문 작성자가 @AnnotationThatNeedsString (someCleverCastOf (CONSTANT_INT))과 같은 것을 요청했다고 생각합니다. –

0

내가

  • 메이크업의 @AnnotationThatNeedsString가 INT 또는
  • 을 제안 문자열 상수합니다. 런타임시이를 int로 파싱 할 수 있습니다.