작년에 저는 모바일 개발자이자 기능 프로그래밍가였습니다.정적 형식 언어의 라이프 사이클 메소드
각 모바일 영역에는 앱의 고기를 구성하는 라이프 사이클 메소드가있는 구성 요소가 있습니다. 다음은 Android 및 Kotlin을 예로 사용하지만 iOS 및 Swift에도 동일하게 적용됩니다.
Android에는 onCreate()
과 같은 라이프 사이클 메소드가있는 Activity
이 있습니다. 이름이 나타내는 것과 정확히 일치하는 함수 onButtonClicked()
을 정의 할 수도 있습니다. 질문의 목적을 위해
, 이제 버튼 클릭 핸들러 onButtonClickedPrintMessageLength()
에 사용되는 onCreate()
에 정의 된 변수가 말할 수 있습니다 (이것은 대개의 경우 이 - onCreate()
은 본질적으로 Activity
의 설정 방법입니다).
예 클래스는 다음과 같이 보일 것이다 :
class ExampleActivity: Activity() {
var savedStateMessage: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
savedStateMessage = "Hello World!"
}
fun onButtonClickedPrintMessageLength() {
System.out.println(savedStateMessage?.length)
}
}
유의 사항 String?
(널 (NULL) 문자열)로 savedStateMessage
의 선언과 ?.
(null의 안전 호출)의 사용. 컴파일러가 onCreate()
이 onButtonClickedPrintMessageLength()
전에 호출 될 것을 보장 할 수 없기 때문에 이러한 작업이 필요합니다. 하지만 개발자로서, we know that onCreate
will always be called first***.
내 질문은 어떻게 이러한 방법의 보장 된 순서에 대해 컴파일러에 알리고 null 검사 동작을 제거 할 수 있습니까?
*이 나는 new
까지 우리 ExampleActivity
에 가능 가정 따라서 안드로이드 프레임 워크와 라이프 사이클 방법을 피하는 직접 onButtonClickedPrintMessageLength()
부르지 만, 흥미로운 아무것도 전에 일어난 컴파일러/JVM 오류로 실행 가능성이있다.
** onCreate
이 먼저 호출된다는 보장은 안드로이드 프레임 워크에서 제공합니다. 안드로이드 프레임 워크는 외부의 진원이며 앞으로 다르게 작동 할 수 있습니다. 모든 안드로이드 애플 리케이션이 진실의 근원을 기반으로하지만, 나는 그것이 안전하다고 믿습니다.
lateinit var savedStateMessage: String
당신은거야 :이 실제 질문에 대답하지는 않지만
컴파일러에게 메소드의 순서를 알릴 수는 없지만 유형을'String'으로 강요하고 쓸모없는 기본값 인'var savedStateMessage : String = "default stupid value"'를 제공 할 수 있습니다. –
이 질문을 관련 프로그래밍 언어/환경별로 별도의 질문으로 나누십시오. 당신이 문제를 풀지 않는다면, 오직 하나만 받아 들일 수 있다고해도 여러 답이 맞을 수 있습니다. – ColGraff
나는 당신과 ColGraff에 동의합니다. 나는이 질문을 두 가지로 구분해야했다 : 하나는 안드로이드 용이고 다른 하나는 iOS 용이다. 다음에 나는 한 가지만 물어 보거나 두 가지 질문을 만듭니다. – codysehl