티스토리 뷰
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
- 안드로이드
- DataBinding
- java
- MVVM
- ViewModel
- JSONArray
- activity
- 안드로이드 #코틀린 #Android #Kotlin
- XML
- TabLayout
- View
- recyclerview
- ArrayList
- Android
- handler
- Livedata
- ViewPager2
- CoordinatorLayout
- Intent
- Architecture Pattern
- Vue.js #Vue.js + javascript
- Design Pattern
- 자바
- James Kim
- Kotlin
- 혀가 길지 않은 개발자
- 코틀린
- fragment
- coroutine
- JSONObject
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함