programing

속성으로 인해 Java 코드가 컴파일되지 않습니다. 상수 식 오류여야 합니다.

closeapi 2023. 10. 28. 07:57
반응형

속성으로 인해 Java 코드가 컴파일되지 않습니다. 상수 식 오류여야 합니다.

나는 왜 아래 내용들이 컴파일되지 않는지 알 수가 없습니다.IDE가 주는 오류는 "주석 속성 RequestParam.defaultValue는 상수 표현이어야 합니다."입니다.

제 프로젝트는 스프링과 메이븐과 관련된 것으로, 다음과 같습니다.

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으로 변환된 것으로 생각하고 있는데 어떻게 수정해야 할지 모르겠습니다.저는 주석과 봄을 처음 접합니다. 어떤 도움이라도 감사합니다.

자바 규칙은 주석이 있을 때, 그리고 그것은 원시적인 타입을 기대하는 매개변수)을 기대하는 파라미터를 가지고 있다고 말합니다.int) 또는 aString, 값은 일정한 식이어야 합니다.[이것은 봄과는 아무 상관이 없습니다.]대략 일정한 표현식은 컴파일 시 컴파일러가 파악할 수 있는 값입니다.그러나 상수 표현을 구성하는 것에는 규칙이 있습니다.이 규칙은 JLS 15.28에 있습니다.일정한 식에서 특정 유형의 연산만 사용할 수 있습니다.다음과 같은 메소드 호출Long.toString(), 그것들 중 하나가 아닙니다.그래서 그것을 사용하는 것은 당신의 표현이 그렇게 보여야 할 것처럼 보여도 일정한 표현이 아니라는 것을 의미합니다. (당신이 보기에는 그렇게 보입니다, 왜냐하면 당신은Long.toString그래요. 하지만 컴파일러는 어떤 메소드가 컴파일 시 값을 알 수 있는 "상수" 메소드인지 알 수 있는 모든 메소드의 카탈로그를 보관하지는 않습니다.)

그러나 링크의 예는+연산자는, 인수들 중 하나가 문자열이 아닐 때에도 사용될 수 있고, 따라서 a.toString()method가 암묵적으로 호출됩니다.이는 다음과 같이 작업을 수행할 수 있음을 의미합니다.

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

근데 저는 안 먹어봤어요.

언급URL : https://stackoverflow.com/questions/39157370/java-code-wont-compile-due-to-attribute-must-be-a-constant-expression-error

반응형