java | March 22, 2022
Type safety: Generics는 runtime이 아닌 compile time에 error가 나타나도록 한다.
또한, 개별 type casting이 필요하지 않다.
// Not use generics
ArrayList al = new ArrayList();
al.add(10);
String s = (String)al.get(0); // Runtime error
// Use generics
ArrayList <String> al = new ArrayList<String> ();
al.add(10); // Compile error
String s = al.get(0); // Doesn't need type casting
C++과 마찬가지로, generic class의 parameter type을 특정하기 위해 <>
를 사용한다.
// Generic class의 instance 생성
BaseType <Type> obj = new BaseType <Type>()
Parameter type 에서는 int
, char
, double
등과 같은 primitives를 사용할 수 없다.
// Compile-time error
Test<int> obj = new Test<int>(20);
Primitive type들의 Array는 reference type이기 때문에 type parameter에 전달될 수 있다.
ArrayList<int[]> a = new ArrayList<>();
Generic class에 여러 개의 Type parameters를 전달할 수 있다.
class Test<T, U> {
T obj1;
U obj2;
}
T
: TypeE
: ElementK
: KeyN
: NumberV
: Valueclass Test {
static <T> void genericDisplay(T element)
{
System.out.println(element.getClass().getName()
+ " = " + element);
}
public static void main(String[] args)
{
genericDisplay(11);
genericDisplay("GeeksForGeeks");
genericDisplay(1.0);
}
}
// Output
java.lang.Integer = 11
java.lang.String = GeeksForGeeks
java.lang.Double = 1.0