Java 제네릭

1 개요[ | ]

데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법
  • generic 예제
class ClassName<E> {
	private E element;
	void set(E element) {
		this.element = element;
	}
	E get() {
		return element;
	}
}
 
class Main {
	public static void main(String[] args) {

		ClassName<String> a = new ClassName<String>();
		ClassName<Integer> b = new ClassName<Integer>();
		a.set("10");
		b.set(10);
		System.out.println("a data : " + a.get());
		System.out.println("a E Type : " + a.get().getClass().getName());
		System.out.println();
		System.out.println("b data : " + b.get());
		System.out.println("b E Type : " + b.get().getClass().getName());
		
	}
}
  • generic method 예제
class ClassName<E> {
	private E element;
	void set(E element) {
		this.element = element;
	}
	E get() {
		return element;
	}
	<T> T genericMethod(T o) {
		return o;
	}
}
public class Main {
	public static void main(String[] args) {

		ClassName<String> a = new ClassName<String>();
		ClassName<Integer> b = new ClassName<Integer>();
		a.set("10");
		b.set(10);
		System.out.println("a data : " + a.get());
		System.out.println("a E Type : " + a.get().getClass().getName());
		
		System.out.println();
		System.out.println("b data : " + b.get());
		System.out.println("b E Type : " + b.get().getClass().getName());
		System.out.println();
		
		System.out.println("<T> returnType : " + a.genericMethod(3).getClass().getName());
		System.out.println("<T> returnType : " + a.genericMethod("ABCD").getClass().getName());
		System.out.println("<T> returnType : " + a.genericMethod(b).getClass().getName());
	}
}


  • 정적 generic 메소드 예제
class ClassName<E> {
 	private E element;
 	void set(E element) {
		this.element = element;
	}
 
	E get() {
		return element;
	}
 	static <E> E genericMethod1(E o) {
		return o;
	}
 	static <T> T genericMethod2(T o) {
		return o;
	}
}
public class Main {
	public static void main(String[] args) {
		ClassName<String> a = new ClassName<String>();
		ClassName<Integer> b = new ClassName<Integer>();
 
		a.set("10");
		b.set(10);
 
		System.out.println("a data : " + a.get());
		System.out.println("a E Type : " + a.get().getClass().getName());
 
		System.out.println();
		System.out.println("b data : " + b.get());
		System.out.println("b E Type : " + b.get().getClass().getName());
		System.out.println();
 
		System.out.println("<E> returnType : " + ClassName.genericMethod1(3).getClass().getName());
		System.out.println("<E> returnType : " + ClassName.genericMethod1("ABCD").getClass().getName());
 		System.out.println("<T> returnType : " + ClassName.genericMethod1(a).getClass().getName());
 		System.out.println("<T> returnType : " + ClassName.genericMethod1(3.0).getClass().getName());
	}
}

2 같이 보기[ | ]

3 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}