익명객체가 public function이나 public property에서 리턴되는 경우.
익명객체의 슈퍼타입으로 동작됨. 이런경우 익명객체에 추가된멤버에 접근불가
class C {
private fun foo() = object { val x:String = "x" }
fun publicFoo() = object { val x:String = "x" }
fun print() {
print(foo().x) // Works
print(publicFoo().x) // Error
}
}
이게 어떻게 동작돼서 퍼블릭일땐 에러인지 설명좀
퍼블릭이 더 넓은 범위아님? 슈퍼타입으로 동작됐다는게 무슨말이지...
저거 평생 쓸 일 없음 넘어가셈
옙
근데 궁금하자너 ;; 그냥 설계할때 저걸 예외처리해서 만든건가 슈퍼타입으로 동작됐다는걸보면 뭔가 다른문법을 알아야되나
인텔리제이 쓰고 있음?
저거 친 다음에 컨트롤 큐로 foo랑 publicFoo의 리턴값 형식 확인해 보셈
foo는 익명오브젝트any, publicFoo는 그냥 Any로 나오네 지역변수로 변해버려서 그런건가 익명객체자체를 좀더알아봐야겟네
익명 타입은 로컬 프라이빗에서만 유지됨
그 밖에선 익명 타입 정보가 아예 지워져버림
밖에서도 쓰려면 클래스나 인터페이스를 새로 만들어서 갖다붙이란 얘기임
감사감사 완벽하게 먼말인진 모르겟지만 알아볼수있을듯