상수 java에서 주석에 값을 제공하는 방법
주석과 해당 매개 변수가 컴파일 타임에 해결되므로 Java에서는 이것이 가능하지 않을 수 있다고 생각합니다. 다음과 같은 인터페이스가 있습니다.
public interface FieldValues {
String[] FIELD1 = new String[]{"value1", "value2"};
}
또 다른 수업은
@SomeAnnotation(locations = {"value1", "value2"})
public class MyClass {
....
}
주석으로 많은 클래스를 표시하고 대신 모든 주석에서 문자열을 지정하지 않아도되는지 알고 싶습니다.
@SomeAnnotation(locations = FieldValues.FIELD1)
public class MyClass {
....
}
그러나 이것은 주석 값과 같은 컴파일 오류를 배열 이니셜 라이저로 만들어야합니다. 누군가가 String 상수 또는 String [] 상수를 사용하여 주석에 값을 제공하는 방법을 알고 있습니까?
컴파일 상수 는 기본 요소 및 문자열 만 될 수 있습니다 .
15.28. 상수 표현식
컴파일 타임 상수 표현식 은 기본 유형의 값 또는 갑자기 완료되지 않고 다음을 사용하여 구성된 문자열을 나타내는 표현식입니다.
- 기본 유형의 리터럴과 유형의 리터럴
String
- 기본 유형으로 캐스트하고 유형으로 캐스트
String
- [...] 연산자 [...]
- 포함 된 표현식이 상수 표현식 인 괄호로 묶은 표현식입니다.
- 상수 변수를 나타내는 간단한 이름.
- TypeName 형식의 규정 된 이름 . 상수 변수를 나타내는 식별자 입니다.
실제로 Java에서는 배열의 항목을 보호 할 방법이 없습니다. 런타임에 누군가가 항상 할 수 FieldValues.FIELD1[0]="value3"
있으므로 더 깊이 보면 배열이 실제로 일정하지 않을 수 있습니다.
주석의 매개 변수로 상수 (정적, 최종 변수)를 사용할 수 있습니다. 빠른 예로, 나는 이것을 다음과 같이 상당히 자주 사용합니다.
import org.junit.Test;
import static org.junit.Assert.*;
public class MyTestClass
{
private static final int TEST_TIMEOUT = 60000; // one minute per test
@Test(timeout=TEST_TIMEOUT)
public void testJDK()
{
assertTrue("Something is very wrong", Boolean.TRUE);
}
}
TEST_TIMEOUT
상수를 주석에 바로 전달할 수 있습니다 .
필자는 배열에서 이것을 시도한 것을 기억하지 못하기 때문에 배열이 Java 변수와 비교하여 주석 매개 변수로 표현되는 방식에 약간의 차이가있는 문제가 발생할 수 있습니까? 그러나 질문의 다른 부분은 문제없이 상수 문자열을 사용할 수 있습니다.
편집 : 방금 String 배열로 이것을 시도했지만 언급 한 문제에 부딪치지 않았지만 컴파일러 는 배열이로 정의되어 있지만 "속성 값이 일정해야합니다"라고 나에게 말했습니다 public static final String[]
. 아마도 배열이 변경 가능하다는 사실이 마음에 들지 않습니까? 흠 ...
예제에서 배열을 제공하지 않습니다. 다음은 잘 컴파일됩니다.
public @interface SampleAnnotation {
String[] sampleValues();
}
public class Values {
public static final String v1 = "A";
public static final String v2 = "B";
@SampleAnnotation(sampleValues = { v1, v2 })
public void foo() {
}
}
누군가 String 상수 또는 String [] 상수를 사용하여 주석에 값을 제공하는 방법을 알고 있습니까?
불행히도 배열로는이 작업을 수행 할 수 없습니다. 비 배열 변수의 경우 값은 최종 정적이어야합니다.
주석과 그 매개 변수가 컴파일 타임에 해결되기 때문에 Java에서 이것이 가능하지 않을 것이라고 생각합니다.
With Seam 2 http://seamframework.org/ you were able to resolve annotation parameters at runtime, with expression language inside double quotes.
In Seam 3 this feature is the module Seam Solder http://seamframework.org/Seam3/Solder
'Programing' 카테고리의 다른 글
모바일 웹 HTML5 프레임 워크 선택하기 (0) | 2020.06.30 |
---|---|
VB.NET은 C # 속성의 속기입니까? (0) | 2020.06.30 |
pthread_cond_wait에는 왜 가짜 웨이크 업이 있습니까? (0) | 2020.06.30 |
android 용 Eclipse의 Admob 오류 : 구성 변경 (0) | 2020.06.30 |
좋은 JavaScript 축소 기가 있습니까? (0) | 2020.06.30 |