Tips 2 인코딩 - 다른 빈 포인터 처리 방법
기본 객체
class LocMsg(val lat: Long, val lng: Long, val dir: Int) {
companion object {
val INVALID_LOC = LocMsg(0, 0, 0)
}
fun isValid(): Boolean = this !== INVALID_LOC
//
}
class MainPage {
var mLoc = LocMsg.INVALID_LOC
fun setLoc(loc: LocMsg) {
mLoc = loc
}
fun refreshMap() {
mMap.setLoc(mLoc)
}
fun getDistance(loc: LocMsg): Double = if (mLoc.isValid()) mLoc.distance(loc) else Double.MAX_VALUE
}
위 데모에서는 고정 객체 INVALID 를 사용합니다.LOC는null을 대체합니다. 기본값을 부여해야 하는 곳에서INVALIDLOC를 설정하면 됩니다. 이렇게 하면 대부분의 상황에서 우리는 더 이상 공중 판정 조작을 할 필요가 없습니다. 또한 isValid() 방법을 제공하여 유효성에 대한 판단이 필요한 장면에 사용할 수 있습니다. 그러면 우리는 대량의 공중 판정 조작을 줄이는 동시에 공중 지침의 안전성을 확보할 수 있습니다.
여기의 데모는 우리가 사용하는 Kotlin을 작성합니다. isValid 방법에서 우리가 사용하는 것은 '! = =' 방식으로 대상이 유효한지 판단하는 것입니다. 왜냐하면 '! =' 은 Kotlin에서 실제적으로 호출된 대상의 equals 방법이기 때문에 판단 오류가 발생할 수 있습니다. (예: 데이터 클래스)
기본 클래스
interface IDisplay {
fun display(canvas: Canvas)
fun isValid(): Boolean = this !is InvalidDisplay
}
class TextDisplay : IDisplay {
override fun display(canvas: Canvas) {
canvas.drawText()
}
}
class ImageDisplay : IDisplay {
override fun display(canvas: Canvas) {
canvas.drawBitmap()
}
}
class InvalidDisplay : IDisplay {
override fun display(canvas: Canvas) {
// do nothing
}
}
class MainPage {
private val mDisplay = createDisplay(mType)
fun refresh(canvas: Canvas) {
mDisplay.display(canvas)
}
fun isUsable(): Boolean = mDisplay.isValid()
fun createDisplay(type: Int) : IDisplay {
when(type) {
TYPE_TEXT -> TextDisplay()
TYPE_IMAGE -> ImageDisplay()
else -> InvalidDisplay()
}
}
}
위의Demo에서 우리는 기본적인 빈 실현 클래스를 사용하여null을 대체했다. 또한 대량의 빈 판정 조작을 경감시키는 역할을 할 수 있을 뿐만 아니라 isValid () 방법으로 특수한 수요를 만족시킬 수 있다.
총결산
사실 위의 두 가지 방법의 사고방식은 모두 똑같다. 모두 특수한 대상으로null을 교체한다. 비록 간단한 기교이지만 때로는 우리의 코드를 더욱 건장하게 할 수도 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.