본문 바로가기

지식쌓기

kotlin - View 확장 class 생성자

View 클래스들을 확장해서 정의할때 

생성자 3개인가 다 정의해줘야 되서 구찮았는데 (os버전따라 4개인경우도)

kotlin에선 간단히 한줄로

class CustomTextView @JvmOverloads constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int = 0)
    : TextView(context, attrs, defStyleAttr)

하지만 저렇게 정의하면 xml에서 정의한 style이 안먹는다네?

그래서 style이 먹어줘야하는 view들은 결국 3개다 정의 ㅋ

class CustemTextView : TextView {

    constructor(context: Context) : super(context)
    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
    constructor(context: Context, attrs: AttributeSet?, defStyle: Int = 0) : super(context, attrs, defStyle)
    
}

 

참고로 @JvmOverloads

/**
 * Instructs the Kotlin compiler to generate overloads for this function that substitute default parameter values.
 *
 * If a method has N parameters and M of which have default values, M overloads are generated: the first one
 * takes N-1 parameters (all but the last one that takes a default value), the second takes N-2 parameters, and so on.
 */
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.CONSTRUCTOR)
@Retention(AnnotationRetention.BINARY)
@MustBeDocumented
public actual annotation class JvmOverloads

 

태그