[Board project] #2. Issues 자바 버전 인식 불가 에러, java: warning: source release 17 requires target release 17
자바 버전 인식 불가 에러
나는 본 프로젝트를 자바 17를 사용하여 진행했다. Instanceof 매칭 등 자바 16버전 이후 지원하는 기능들을 코드에 반영했기 때문이다. 나의 경우 buld.gradle 에서 17버전으로 정상 세팅이 되어있었지만 이상하게도 해당 오류가 발생했다.
해결 방법
해당 오류는 프로젝트의 java 버전을 일관되게 설정해주지 않아서 발생하는 에러이다.
- 좌측 상단에 IDEA 메뉴 → 설정 → Gradle 메뉴에서 아래와 같이 설정을 잡아주었다.
자바 버전 17로 지정
- 어플리케이션 빌드 재구성 하기
해당 화면에서 java 11 버전을 17 로 바꾸어 주었다.
- 프로젝트 구조에서 버전 변경
파일 → 프로젝트 구조 변경 에서 SDK 와 언어 수준을 17로 통일 해주었더니 바로 정상적인 화면이 뜨는 걸 볼 수 있다.
자바 17 버전 업데이트 후 내가 사용한 Instanceof 매칭이란?
이전 버전 경우 Instanceof 내부에서 객체를 캐스팅 하는 과정이 필요하였으나, 캐스팅 과정을 내부에서 지원할 수 있도록 변경한 것을 의미한다.
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof ArticleComment)) return false;
ArticleComment that = (ArticleComment) o;
return id != null && id.equals(that.id);
}
자바 16이전 이전 코드
instanceof
다음에 변수를 선언하여 사용하는 Pattern Matching for instanceof는 Java 16부터 도입된 기능이므로 Java 11에서는 해당 문법을 직접 사용할 수 없다. Java 11에서는 이전의 방식을 사용하여instanceof
연산자와 캐스팅 코드를 분리해서 작성해야 한다.
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof ArticleComment that)) return false;
return id != null && id.equals(that.id);
}
자바 17버전 사용 코드 (Instanceof 사용)
Leave a comment