티스토리 뷰

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

 

'Android > Kotlin' 카테고리의 다른 글

[Kotlin]  BuildConfig  (0) 2020.08.07
[Kotlin]  enum  (0) 2020.08.07
[Kotlin]  Toolbar  +  include  (0) 2020.08.05
[Kotlin]  ImageView  타원화  (0) 2020.08.04
[Kotlin]  CoordinatorLayout  +  ViewPager2  +  TabLayout  (0) 2020.08.03
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함