programing

어떻게 평역에 지속적인 자바에서 값으로 공급됩니다.

prostudy 2022. 7. 25. 22:22
반응형

어떻게 평역에 지속적인 자바에서 값으로 공급됩니다.

나는 때문에 주석 및 해당 매개 변수 컴파일 시간에 해결된다 이 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

반응형