Kotlinの拡張関数
5569 ワード
拡張関数について説明する前に、変数と属性について簡単に説明します.
変数#ヘンスウ#
変数は通常変えることができ、定数は変えることができない.例えば
kotlinでは変数のタイプを指定する必要がなく、初期化時に自動的に推定することで、コードをより明確かつ簡潔にすることができますval dog=Dog()/Dogオブジェクトval str=“string”//String valage=18//Int val actionBar=supportActionBar//actionBarですが、タイプを指定する必要がある場合があります.例:val context:Context=Activity
ツールバーの
属性はJavaのフィールドと同じですが、より強力です.彼らの違いを一例で比較します`java:
Javaではsetterとgetter関数を使用してプロパティを操作し、アクセスします.
使用するときに直接使用すればいいです.属性はデフォルトでgetterとsetterを使用します.もちろん、コードを変更することもできます.
filedはkotlinの予約フィールドで属性にアクセスします
属性がval修飾の場合、これは私たちがアクセスできるだけで、変更できません.getterのみを呼び出すことができ、setterを呼び出すことはできません.
データを受信するためにのみ使用される場合、例えばandroidでは、jsonデータをオブジェクトに変換してページに表示する場合にvalを使用することが望ましい.
拡張関数
たとえば、Viewタイプの拡張関数:kotlinファイル
変数#ヘンスウ#
変数は通常変えることができ、定数は変えることができない.例えば
java
のfinal
で修飾する変数は定数では変えられない.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()
......