#概要
Androidにて強制バージョンアップの処理を実装する際に、
二つの異なるバージョンを比較する実装をKotlinにて実装しました。
Javaによる実装はあったのですがKotlinの実装例がなかったので投稿
こちらを参考にKotlin版を実装しました。
#実装内容
Version.kt
package jp.exam
import java.util.*
class Version: Comparable<Version> {
private var version: String
private var parts: List<String>
constructor(version: String) {
if(!version.matches(Regex("[0-9]+(\\.[0-9]+)+"))) {
throw IllegalAccessException("Invalid version format")
}
this.version = version
this.parts = version.split(Regex("\\."))
}
override fun compareTo(other: Version): Int {
val length = Math.max(this.parts.size, other.parts.size)
for (i in 0..(length - 1)) {
val thisPart = if(i < this.parts.size) this.parts[i].toInt() else 0
val otherPart = if(i < other.parts.size) other.parts[i].toInt() else 0
if (thisPart < otherPart) {
return -1
}
if (thisPart > otherPart) {
return 1
}
}
return 0
}
override fun equals(other: Any?): Boolean {
if (this == other) return true
if (other == null) return false
if (this::class.java.name != other::class.java.name) {
return false
}
return this.compareTo(other as Version) == 0
}
}
#使い方
val currentAppVersion = Version("1.0.0")
val latestVersion = Version("1.1.0")
Log.d("Result", currentAppVersion.compareTo(latestVersion)) // -1
val currentAppVersion = Version("1.0.0")
val latestVersion = Version("1.0.0")
Log.d("Result", currentAppVersion.compareTo(latestVersion)) // 0
val currentAppVersion = Version("1.0.1")
val latestVersion = Version("1.0.0")
Log.d("Result", currentAppVersion.compareTo(latestVersion)) // 1
Androidの場合VersionCodeで比較すればもっと楽に分岐できるのですが、
様々なバージョンへの応用とiOSとの実装を合わせるという観点から実装してみました。