틀린 부분 있으면 댓글이나 지적 환영
https://namjackson.tistory.com/18 참조 하면서 만들었어요
그냥 대충 만든 코드 제네릭이 뭔지 알기위한 그런 코드니 참고용으로만 봐주세요
1 . 제네릭 class
public class GenericSource<T> {
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
public class GenericSource2<T> {
private int test2;
private int test3;
public int getTest2() {
return test2;
}
public void setTest2(int test2) {
this.test2 = test2;
}
public int getTest3() {
return test3;
}
public void setTest3(int test3) {
this.test3 = test3;
}
@Override
public String toString() {
return "GenericSource2 [test2=" + test2 + ", test3=" + test3 + "]";
}
}
interface InterFaceExample <T1,T2>{
T1 testMethod12(T2 t);
T2 testMethod13(T1 t);
}
public class TestInterface implements InterFaceExample<String, Integer>{
@Override
public String testMethod12(Integer t) {
return String형태;
}
@Override
public Integer testMethod13(String t) {
return Integer형태;
}
}
3.메소드를 사용할시에
public class TestGenericMethod {
public static <T> List<T> methodEx(List<T> list,T item)
{
list.add(item);
return list;
}
public static <String> List<String> methodEx12(List<String> list,String item)
{
list.add(item);
return list;
}
public static <Integer> List<Integer> methodEx12(List<Integer> list,String item)
{
list.add(item);
return list;
}
//parameter에서 형태의 List가 들어가니 리턴도 그걸로 해주겠다라는거 같다
}
public class GenericMain {
public static void main(String args[]) {
GenericSource<Integer> test = new GenericSource<Integer>();
GenericSource<String> test1 = new GenericSource<String>();
test.setT(10);
test.setT("test123"); error[test에는 문자열이 들어올수없다 위에 이미 선언을 해놔서]
test.setT(123);// integer으로 했을떄 정상
test1.setT(123); error[test1 변수는 String 클래스만 들어오게 설정해놔서 int형은 들어올수 없다]
// String 으로 했을 경우는 정상
test1.setT("test123");
String paramStr = "1";
Integer paramint =0;
List<String> strList = new ArrayList<String>();
List<Integer> intList = new ArrayList<Integer>();
TestMethod.methodEx(strList, paramStr);(O);
TestMethod.methodEx(strList, paramint);(X);
}
}
5.다음으로 WildCard라는게 있다
1. Generic 타입에는 <?>도 존재한다.
2.?는 알수없는 타입이며, 사용법으로는 아래와같다
3.<?> : 모든 객체 자료형, 내부적으로는 Object로 인식
4.<? super 객체형> : 명시된 객체자료형의 상위 객체, 내부적으로는 Object로 인식
5.<? extends 객체자료형> : 명시된 객체자료형을 상속한 하위객체, 내부적으로는 명시된 객체 자료형으로 인식