Kotlinの拡張関数

5569 ワード

拡張関数について説明する前に、変数と属性について簡単に説明します.
変数#ヘンスウ#
変数は通常変えることができ、定数は変えることができない.例えばjavafinalで修飾する変数は定数では変えられない.kotlinではvalとvarで修飾し,valで修飾した変数は ,varで修飾した変数は であった.
kotlinでは変数のタイプを指定する必要がなく、初期化時に自動的に推定することで、コードをより明確かつ簡潔にすることができますval dog=Dog()/Dogオブジェクトval str=“string”//String valage=18//Int val actionBar=supportActionBar//actionBarですが、タイプを指定する必要がある場合があります.例:val context:Context=Activity
ツールバーの
属性はJavaのフィールドと同じですが、より強力です.彼らの違いを一例で比較します`java:
public class Person {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

Javaではsetterとgetter関数を使用してプロパティを操作し、アクセスします.kotlin:
public class Person {
    var name: String = ""
}

val person = Person()
person.name = "name"
val name = person.name

使用するときに直接使用すればいいです.属性はデフォルトでgetterとsetterを使用します.もちろん、コードを変更することもできます.
public classs Person {
    var name: String = ""
    get() = field.toUpperCase()
    set(value){
        field = "Name: $value"
    }
}

filedはkotlinの予約フィールドで属性にアクセスします
属性がval修飾の場合、これは私たちがアクセスできるだけで、変更できません.getterのみを呼び出すことができ、setterを呼び出すことはできません.
public classs Person {
    var name: String = ""
    get() = field.toUpperCase()
}

データを受信するためにのみ使用される場合、例えばandroidでは、jsonデータをオブジェクトに変換してページに表示する場合にvalを使用することが望ましい.
data class City(val id: Long, val name: String, val coord: Coordinates, val country: String, val population: Int)
data class Coordinates(val lon: Float, val lat: Float)

拡張関数 とは、クラスに新しい動作を追加することであり、このクラスコードへのアクセス権さえありません.これは有用な関数が欠けているクラス上の拡張方法である.Javaではstatic付きのツールクラスが多く実装されています.kotlinでは拡張関数を用いてこれらの機能を実現することができる. は、元のクラスを本当に修正したわけではなく、静的インポート方式で実現されています.拡張関数は任意のファイルに宣言できるので、新しいファイルに一連の関連関数を置くことができます.
たとえば、Viewタイプの拡張関数:kotlinファイルViewExtensions.ktを作成できます.
val View.ctx: Context
    get() = context

var TextView.textColor: Int
    get() = currentTextColor
    set(v) = setTextColor(v)

fun View.slideExit() {
    if (translationY == 0f) this.animate().translationY(-height.toFloat())
}

fun View.slideEnter() {
    if (translationY < 0f) this.animate().translationY(0f)
}

fun Context.setTextViewRightImg(textView: TextView, res: Int) {
    val drawable = ContextCompat.getDrawable(this, res)
    drawable?.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight)
    textView.setCompoundDrawables(null, null, drawable, null)
}
......

//   
 it.second.textColor = Color.RED
 toolbar.slideExit() else toolbar.slideEnter()
 ......