Kotlin에서 대체 종속 방법 프롬프트

8523 단어 Kotlin

입문


라이브러리를 만들고 공동으로 사용하는 처리를 하면 여러 가지 상황에 따라 API를 배치하고 싶을 수도 있습니다.
Kotlin도 Java와 마찬가지로 Deprecated 주석을 사용할 수 있지만 Kotlin은 사용자에게 API로 바꿀 것을 알릴 수 있습니다.
이번에는 실제로 Deprecated를 쓴 것을 소개하겠습니다. 아주 편리합니다.

실제 예


졸작 Kotlin 라이브러리Kotpref에서 Kotpref라는 오브젝트bulk를 배치하고 확장 함수bulk로 바꾸는 예를 살펴보자.
변경 전(Kotpref.kt)
object Kotpref {
    // 省略…

    fun <T : KotprefModel> bulk(receiver: T, f: T.() -> Unit) {
        // 省略…
    }
}
변경 후(KotprefExtensions.kt)
inline fun <T : KotprefModel> T.bulk(block: T.() -> Unit) {
    // 省略…
}
이것bulk은 이용 측면에서 다음과 같다.
우리는 깊이 있는 주석을 사용하여 이 원본을 바꾸는 방법을 고려할 것이다.
object UserInfo : KotprefModel() {
    var name: String by stringPrefVar()
}

class Example {
   fun deprecateExample() {
        Kotpref.bulk(UserInfo) {
            name = "chibatching"
        }
   }
}

깊이 주석


Kotlin의 깊이 주석에는 최대 3개의 매개변수가 있습니다.
매개 변수
함의
message
반드시사용자에게 표시되는 메시지는 비어 있어도 종속적으로 표시됩니다.
replaceWith
이번 간, 치환 방법을 지정합니다.다음은 설명입니다.
level
배치된 단계를 지정합니다.기본값WARN.지정HIDDEN하면 API가 단순히 보이지 않고 교체할 수 없는 요약이 됩니다.

ReplaceWith


이번 간ReplaceWith의 주석은 다음과 같다정의됨.
public annotation class ReplaceWith(val expression: String, vararg val imports: String)
ReplaceWith 주석의 첫 번째 매개변수 expression 를 사용하여 대체 방법을 지정할 수 있습니다.
사용자는 아래와 같이 교체할 수 있다면 깊이 API의 이전을 완성할 수 있기 때문에 이 교체를 할 수 있는 expression을 고려해 보자.
Kotpref.bulk(UserInfo) {
    name = "chibatching"
}
// いい感じに↓のように置換したい
UserInfo.bulk {
    name = "chibatching"
}

expression 고려


그러나 API를 배포하고 새 API로 마이그레이션하려면 배포된 API를 구현해야 하는 이유는 무엇입니까?
이런 패턴도 있지만 새로운 API를 호출해서 이루어지는 경우가 많죠?
예를 들어 이번 상황은 ↓ 이런 상황이다.
fun <T : KotprefModel> bulk(receiver: T, f: T.() -> Unit) {
    receiver.bulk(f) // 廃止するAPIでは新設するAPIを実行する
}

inline fun <T : KotprefModel> T.bulk(block: T.() -> Unit) {
    // 省略…
}
왜 갑자기 이런 말을 하는지 이 새 API를 호출하는 부분이다.이거 그냥 expression으로 쓸 수 있어요!
따라서 배포하려는 API의 선언은 다음과 같습니다.
@Deprecated(
        message = "",
        replaceWith = ReplaceWith("receiver.bulk(f)")
)
fun <T : KotprefModel> bulk(receiver: T, f: T.() -> Unit) {
    receiver.bulk(f)
}
이제 IDE에서 새 API 교체에 대한 요약 및 자동 교체, 배포 경고를 수행할 수 있습니다.
실제로 교체를 하면 Android Studio에서 ↓ 이 됩니다.

이렇게 방법의 매개 변수와 블록을 좋은 느낌으로 전개하여 교체하는 것을 볼 수 있다.
또한 import를 명확하게 추가하려면 ReplaceWith 의 두 번째 매개 변수로 지정할 수 있습니다.
공식 문서 어떤 글씨를 쓸 수 있는지 거의 모르기 때문에 다른 어떤 글씨를 쓸 수 있는지는 Kotlin의 출처가 가장 좋다.
Search Results

마지막


파라미터가 증가하는 경우 등 이번 예처럼 예쁘게 바꿀 수 없는 패턴도 많지만 한 번에 잘 바꿀 수 있다면 편하다.
또한 일괄 교환ReplaceWith도 가능하기 때문에 기능을 잘 발휘하면 사용자 측이 새로운 API로 이동하는 것도 순조롭게 진행될 수 있겠지.

좋은 웹페이지 즐겨찾기