티스토리 뷰
T : read/write 모두 가능
? extends T : read 만 가능한 서브타입 와일드카드
? super T : write 만 가능한 슈퍼 타입 와일드카드
User.java
package com.jwsoft.javaproject;
public class User<S, I> {
private S name;
private I age;
public User(S name, I age) {
this.name = name;
this.age = age;
}
public void setName(S name) {
this.name = name;
}
public void setAge(I age) {
this.age = age;
}
public S getName() {
return this.name;
}
public I getAge() {
return this.age;
}
}
MainActivity.java
package com.jwsoft.javaproject;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<User<String, Integer>> userItems = new ArrayList<>();
userItems.add(new User("James Kim", 30));
showUsers(userItems);
}
public void showUsers(ArrayList<User<String, Integer>> userItems) {
userItems.add(new User("Kevin Jang", 27));
for (int i=0; i<userItems.size(); i++) {
Log.e("name", userItems.get(i).getName());
Log.e("age", userItems.get(i).getAge() + "살");
}
}
}

MainActivity.java
package com.jwsoft.javaproject;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<User<String, Integer>> userItems = new ArrayList<>();
userItems.add(new User("James Kim", 30));
showUsers(userItems);
}
public void showUsers(ArrayList<? extends User<String, Integer>> userItems) {
userItems.add(new User("Kevin Jang", 27));
for (int i=0; i<userItems.size(); i++) {
Log.e("name", userItems.get(i).getName());
Log.e("age", userItems.get(i).getAge() + "살");
}
}
}
extends 사용 시 읽기만 가능

MainActivity.java
package com.jwsoft.javaproject;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<User<String, Integer>> userItems = new ArrayList<>();
userItems.add(new User("James Kim", 30));
showUsers(userItems);
}
public void showUsers(ArrayList<? super User<String, Integer>> userItems) {
userItems.add(new User("Kevin Jang", 27));
for (int i=0; i<userItems.size(); i++) {
Log.e("name", userItems.get(i).getName());
Log.e("age", userItems.get(i).getAge() + "살");
}
}
}
super 사용 시 쓰기만 가능

참고
thdev.tech/kotlin/androiddev/2017/10/03/Kotlin-Generics/
Kotlin Generics 정의 |
I’m an Android Developer.
thdev.tech
'Android > Java' 카테고리의 다른 글
| [Java] BuildConfig (0) | 2020.08.07 |
|---|---|
| [Java] enum (0) | 2020.08.07 |
| [Java] Toolbar + include (0) | 2020.08.05 |
| [Java] ImageView 타원화 (0) | 2020.08.04 |
| [Java] CoordinatorLayout + ViewPager2 + TabLayout (0) | 2020.08.03 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Vue.js #Vue.js + javascript
- activity
- handler
- 코틀린
- Intent
- recyclerview
- DataBinding
- 안드로이드 #코틀린 #Android #Kotlin
- View
- ViewModel
- java
- Livedata
- MVVM
- Design Pattern
- TabLayout
- ArrayList
- CoordinatorLayout
- Android
- coroutine
- Kotlin
- 안드로이드
- ViewPager2
- JSONObject
- James Kim
- fragment
- 혀가 길지 않은 개발자
- 자바
- Architecture Pattern
- JSONArray
- XML
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함