티스토리 뷰

Android/Java

[Java]  Generics  (2)

혀가 길지 않은 개발자 2020. 8. 6. 10:53

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
링크
«   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
글 보관함