23.07.04 15:32 작성
·
228
0
개인적으로 공부를 하던 중 잘 풀리지 않아 문의드리게 되었습니다
.java
.kt
다름이 아니라 실행시점에 샘플 데이터를 미리 저장시켜두고 싶어서 자바로 작성했던 위의 코드를 아래와 같이 코틀린으로 변경 후에 실행을 시켜보았습니다.
그런데 실행을 시키면
CGLIB, subclass 등 오류가 발생해서 구글 검색을 통해 최대한 해결해보려 하였으나, allOpen 설정도 해보고 이것저것 해보았음에도 해결하지 못해서 이렇게 염치불구하고 문의드리게 되었습니다 ㅜ 혹시 어떤 문제인지 아실까요??
답변 1
1
2023. 07. 04. 20:03
안녕하세요, wonyh12님! 질문 주셔서 감사드립니다~ 😊
우선 해당 에러의 1차적인 원인은 (코틀린 쪽) InitService
가 final 이기 때문입니다!!
wonyh12님께서도 이 사실을 인지하시고, allOpen 설정도 해주신 것 같아요!
다만, allOpen 설정이 companion object에 적용되지 않았고, 실제 decompile한 코드를 보시면 InitService
는 여전히 final 일겁니다!
해결하는 방법은 다음과 같습니다.
Java의 static 내부 class를 코틀린에서 표현하면, class 안의 class이기 때문에 InitDb 안의 InitService를 그냥 class로 만들어 주시면 될 것 같아요.
말씀드리고 보니 해결 보다는 우회 같긴 하네요 ㅎㅎㅎㅎ
class InitDb {
...
class InitService {
}
}
꼭 해결되셨으면 좋겠습니다.
감사합니다!! 🙏
2023. 07. 05. 08:26
강의 외 질문에도 시간을 내셔서 답변주셔서 정말 감사합니다.
말씀주신대로 class 안의 class로 해당 문제를 해결하였습니다!
번외로 allOpen에서 companion object에 대한 설정을 찾아보도록 하겠씁니다!