주석과 해당 매개 변수가 컴파일 타임에 해결되므로 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 val0 = "A";
public static final String val1 = "B";
@SampleAnnotation(sampleValues={ val0, val1 })
public void foo() {
}
}
답변
누군가 String 상수 또는 String [] 상수를 사용하여 주석에 값을 제공하는 방법을 알고 있습니까?
불행히도 배열로는이 작업을 수행 할 수 없습니다. 비 배열 변수의 경우 값은 최종 정적이어야합니다.
답변
주석과 해당 매개 변수가 컴파일 타임에 해결되므로 Java에서는 이것이 가능하지 않을 수 있다고 생각합니다.
Seam 2 http://seamframework.org/ 를 사용하면 런타임시 주석 언어를 큰 따옴표로 묶어 주석 매개 변수를 분석 할 수있었습니다.
Seam 3 http://seamframework.org/Seam3/Solder 에서이 기능은 Seam Solder 모듈입니다
답변
주석 필드에서 열거 형을 사용하고 해당 열거 형을 참조 할 수 있습니다