어떻게 평역에 지속적인 자바에서 값으로 공급됩니다.
나는 때문에 주석 및 해당 매개 변수 컴파일 시간에 해결된다 이 Java에 가능한 것은 아닐 생각이야.나는 follows, 인터페이스를 가지고 있다.
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[]끊임 없는 상수를 사용할 수 있다는 것을 아나요?
Compile 상수는 기본 요소와 천:.
15.28. 상수 Expressions
Acompile-time 지속적인 표현은 표현한 기본 형식 또는 String의 갑작스럽고 다음 사항 만을 사용하여는 완료되지 않는 값을 나타내는 표시:.
- 형식의 기본 형식과 오며 리터럴의 Literals.
String
- 기본 형식과 출연자 입력할 Casts.
String
- [...]사업자[...]
- Parenthesized 표현이 포함된 표현은 일정한 표현이다.
- 지속적으로 변수를 참조한다 간단한 이름.
- 폼의 해당 이름 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을 사용할 수 있습니다.
편집: 방금 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[] 상수를 사용하여 주석 값을 제공하는 방법을 아는 사람이 있습니까?
안타깝게도 어레이에서는 이 작업을 수행할 수 없습니다.배열 변수가 아닌 경우 값은 최종 정적이어야 합니다.
자바에서는 주석과 그 파라미터가 컴파일 시에 해결되기 때문에 불가능하다고 생각합니다.
Seam 2 http://seamframework.org/ 에서는 실행 시 큰따옴표로 둘러싸인 표현 언어를 사용하여 주석 매개 변수를 해결할 수 있었습니다.
Seam 3 http://seamframework.org/Seam3/Solder, 에서는 이 기능이 모듈의 Seam Solder입니다.
enum을 사용하여 주석 필드에서 해당 enum을 참조할 수 있습니다.
언급URL : https://stackoverflow.com/questions/2065937/how-to-supply-value-to-an-annotation-from-a-constant-java
'programing' 카테고리의 다른 글
두 번째 클릭 후에만 모달 표시 (0) | 2022.07.25 |
---|---|
Storybook에서 Vuetify 테마 설정이 작동하지 않음 (0) | 2022.07.25 |
IntelliJ IDEA 기본 JDK 변경 방법 (0) | 2022.07.25 |
C 또는 C++로 바이너리 리터럴을 사용할 수 있습니까? (0) | 2022.07.25 |
다차원 어레이는 메모리에서 어떻게 포맷됩니까? (0) | 2022.07.25 |