Anonymous Class with Super Token Types
java kotlin jackson
Anonymous Class
Deserialize Generic 에서 Super Type Tokens 라는 개념을 잠깐 살펴봤는데, 이 개념의 핵심은 anonymous inner classes 를 활용하여 컴파일 시간동안 타입 정보를 보존 하는 것이다.
var typeRef: TypeReference<Member> = object : TypeReference<Member>() {}
익명 클래스는 내부 클래스이기 때문에 Member 에 대한 참조를 가지고 있다.
위 코드를 디컴파일 하면 아래와 같다.
@Metadata(
mv = {1, 7, 0},
k = 2,
d1 = {"\u0000\u000e\n\u0000\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0005\" \u0010\u0000\u001a\b\u0012\u0004\u0012\u00020\u00020\u0001X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\u0003\u0010\u0004\"\u0004\b\u0005\u0010\u0006¨\u0006\u0007"},
d2 = {"typeRef", "Lcom/fasterxml/jackson/core/type/TypeReference;", "Lteam/backend/domain/member/entity/Member;", "getTypeRef", "()Lcom/fasterxml/jackson/core/type/TypeReference;", "setTypeRef", "(Lcom/fasterxml/jackson/core/type/TypeReference;)V", "api"}
)
public final class PrincipalDetailsKt {
@NotNull
private static TypeReference typeRef = (TypeReference)(new TypeReference() {
});
@NotNull
public static final TypeReference getTypeRef() {
return typeRef;
}
public static final void setTypeRef(@NotNull TypeReference var0) {
Intrinsics.checkNotNullParameter(var0, "<set-?>");
typeRef = var0;
}
}
d2 를 보면 Lteam/backend/domain/member/entity/Member;
코드를 볼 수 있다.