Android/Kotlin
[Kotlin] Generics (2)
혀가 길지 않은 개발자
2020. 8. 6. 12:40
T : 별도의 Wildcard 정의가 없이 read/write 모두 가능
in T : Java 의 ? super T 와 같음. input 의 약자이며 write 만 가능
out T : Java 의 ? extends T 와 같음. output 의 약자이며 read 만 가능
User.kt
package com.jwsoft.kotlinproject
class User<S, I> (
var name: S,
var age: I
)
MainActivity.kt
package com.jwsoft.kotlinproject
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val users: ArrayList<User<String, Int>> = ArrayList()
users.add(User("James Kim", 30))
showUsers(users)
}
fun showUsers(users: ArrayList<User<String, Int>> ) {
users.add(User("Kevin Jang", 27))
for (i in 0 until users.size) {
Log.e("name", users[i].name)
Log.e("age", users[i].age.toString())
}
}
}
MainActivity.kt
package com.jwsoft.kotlinproject
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val users: ArrayList<User<String, Int>> = ArrayList()
users.add(User("James Kim", 30))
showUsers(users)
}
fun showUsers(users: ArrayList<out User<String, Int>> ) {
users.add(User("Kevin Jang", 27))
for (i in 0 until users.size) {
Log.e("name", users[i].name)
Log.e("age", users[i].age.toString())
}
}
}
out 사용 시 읽기만 가능
MainActivity.kt
package com.jwsoft.kotlinproject
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val users: ArrayList<User<String, Int>> = ArrayList()
users.add(User("James Kim", 30))
showUsers(users)
}
fun showUsers(users: ArrayList<in User<String, Int>> ) {
users.add(User("Kevin Jang", 27))
for (i in 0 until users.size) {
Log.e("name", users[i].name)
Log.e("age", users[i].age.toString())
}
}
}
in 사용 시 쓰기만 가능
참고
thdev.tech/kotlin/androiddev/2017/10/03/Kotlin-Generics/
Kotlin Generics 정의 |
I’m an Android Developer.
thdev.tech