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