Java 제네릭

에어컨 (토론 | 기여)님의 2021년 10월 31일 (일) 20:06 판

개요

데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법
  • 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) { 
	}
	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());
	}
}
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}