실제로 30 분 전에이 정확한 질문이 있었으므로 파고 들기 시작했고 이에 대한 해결책이나 해결책을 찾을 수 없었지만 검색하는 동안 Kotlinglang 웹 사이트 에서이 섹션 을 발견 했습니다.
확장은 널 입력 가능 리시버 유형으로 정의 될 수 있습니다. 이러한 확장은 값이 null 인 경우에도 객체 변수에서 호출 될 수 있습니다.
그래서 나는 가장 미친 아이디어를 가지고 있었지만, nullable 수신기로 확장 함수를 정의하고 (실제로 해당 수신기를 사용하지 않고) null 객체에서 호출하지 마십시오! 그래서 나는 그것을 시도했지만 꽤 잘 작동했지만 너무 못 생겼습니다. 다음과 같았습니다 :
(null as Type?).staticFunction(param1, param2)
그래서 수신기 값의 확장 파일에 null 값을 가진 val을 만든 다음 다른 클래스에서 사용하여 문제를 해결했습니다. 예를 들어 Navigation
Android 에서 클래스에 대한 "정적"확장 기능을 구현 한 방법은 다음과 같습니다. 내 NavigationExtensions.kt 파일에서 :
val SNavigation: Navigation? = null
fun Navigation?.createNavigateOnClickListener(@IdRes resId: Int, args: Bundle? = null, navOptions: NavOptions? = null,
navigationExtras: Navigator.Extras? = null) : (View) -> Unit {
//This is just implementation details, don't worry too much about them, just focus on the Navigation? part in the method declaration
return { view: View -> view.navigate(resId, args, navOptions, navigationExtras) }
}
그것을 사용하는 코드에서 :
SNavigation.createNavigateOnClickListener(R.id.action_gameWonFragment_to_gameFragment)
분명히 이것은 클래스 이름이 아니며 null 값을 갖는 클래스 유형의 변수 일뿐입니다. 이것은 변수를 작성해야하기 때문에 확장 메이커 측과 SType
실제 클래스 이름 대신 형식 을 사용해야하기 때문에 개발자 측에서는 분명히 추악 하지만 지금 당장 달성 할 수있는 가장 가까운 것입니다 실제 정적 함수와 비교합니다. Kotlin 언어 제작자들은 작성된 문제에 응답하고 해당 기능을 해당 언어로 추가하기를 바랍니다.