복붙노트

[SPRING] Java 코드는 속성이 상수 표현식 오류 여야하므로 컴파일되지 않습니다.

SPRING

Java 코드는 속성이 상수 표현식 오류 여야하므로 컴파일되지 않습니다.

나는 왜 다음이 컴파일되지 않을지 알 수 없다. IDE에서 제공하는 오류는 "주석 속성 RequestParam.defaultValue의 값은 상수 표현이어야합니다"입니다.

내 프로젝트는 Spring과 Maven을 포함하며, 다음과 같이 진행된다.

private static final String MAX_LONG_AS_STRING = Long.toString(Long.MAX_VALUE);

@RequestMapping(method=RequestMethod.GET)
public List<Spittle> spittles(
        @RequestParam(value="max",
                    defaultValue=MAX_LONG_AS_STRING) long max,
        @RequestParam(value="count", defaultValue="20") int count) {
    return spittleRepository.findSpittles(max, count);
}

나는 Long에서 String으로 변환 할 때 오류가 발생한다고 생각하고 있지만이를 고치는 방법을 모른다. 어떤 도움을 주시면 감사하겠습니다. 특수 효과와 봄을 처음 접했습니다.

해결법

  1. ==============================

    1.자바 규칙은 주석을 가지고 있으며 원시 타입 (예 : int) 또는 문자열을 기대하는 매개 변수를 가지고있는 경우 값이 상수 표현식이어야한다고 말합니다. [이것은 Spring과는 아무런 관련이 없습니다.] 대충 말하면, 상수 표현식은 컴파일러가 컴파일 타임에 알아낼 수있는 값입니다. 그러나 상수 표현을 구성하는 규칙이 있습니다. 이 규칙은 JLS 15.28에 있습니다. 상수 표현식에서는 특정 유형의 조작 만 사용할 수 있습니다. Long.toString ()과 같은 메서드 호출은 그 중 하나가 아닙니다. 따라서 식을 사용하면 표현식이 상수가 아닌 것처럼 보입니다. (LongToString이 무엇을하는지 알기 때문에 당신에게 닮아 있습니다 만, 컴파일러는, 모든 메소드의 카탈로그를 보관 유지해, 컴파일 타임에 값을 계산할 수있는 「정수」메소드가 무엇인지를 알지 않습니다.

    자바 규칙은 주석을 가지고 있으며 원시 타입 (예 : int) 또는 문자열을 기대하는 매개 변수를 가지고있는 경우 값이 상수 표현식이어야한다고 말합니다. [이것은 Spring과는 아무런 관련이 없습니다.] 대충 말하면, 상수 표현식은 컴파일러가 컴파일 타임에 알아낼 수있는 값입니다. 그러나 상수 표현을 구성하는 규칙이 있습니다. 이 규칙은 JLS 15.28에 있습니다. 상수 표현식에서는 특정 유형의 조작 만 사용할 수 있습니다. Long.toString ()과 같은 메서드 호출은 그 중 하나가 아닙니다. 따라서 식을 사용하면 표현식이 상수가 아닌 것처럼 보입니다. (LongToString이 무엇을하는지 알기 때문에 당신에게 닮아 있습니다 만, 컴파일러는, 모든 메소드의 카탈로그를 보관 유지해, 컴파일 타임에 값을 계산할 수있는 「정수」메소드가 무엇인지를 알지 않습니다.

    그러나 링크의 예제는 인수 중 하나가 문자열이 아니므로 toString () 메서드가 암시 적으로 호출되는 경우에도 + 연산자를 사용할 수 있음을 보여줍니다. 이는 다음과 같이 일을 진행할 수 있음을 시사합니다.

    private static final String MAX_LONG_AS_STRING = "" + Long.MAX_VALUE;
    

    나는 그것을 시도하지 않았다.

  2. from https://stackoverflow.com/questions/39157370/java-code-wont-compile-due-to-attribute-must-be-a-constant-expression-error by cc-by-sa and MIT license