티스토리 뷰
Generic 자료형
class에서 사용하는 변수의 자료형이 여러개인 경우
-> 클래스의 자료형을 특정하지 않는 것
컴파일 될 때 <T>가 원하는 자료형으로 바뀝니다.
형변환을 일일이 안해줘도 됩니다.
ex)
//Circle.java
public class Circle {
//..
}
//GenericEX.java //Generic class
public class GenericEX<T> {
private T shape;
public void setShape(T shape) {
this.shape = shape;
}
public T getShape() {
return shape;
}
public String toString() {
return shape.toString();
}
}
//Test.java
public class Test {
public static void main(String[] args) {
GenericEX<Circle> p = new GenericEX<>();
//GenericEX<Circle> p = new GenericEX<Circle>(); 위와 같습니다.
// 1.
p.setShape(new Circle());
// 2.
//Circle c = new Circle();
//p.setShape(c);
Circle p2 = p.getShape();
}
}
<T extends class >
T 자료형의 범위 제한
상속을 받지 않는 경우 <T>는 Object로 변환
// Figure.java
public abstract class Figure {
//..
}
//Circle.java
public class Circle extends Figure{
//..
}
//Rectangle.java
public class Rectangle {
//..
}
//GenericEX.java //Generic class
public class GenericEX<T extends Figure> {
private T shape;
public void setShape(T shape) {
this.shape = shape;
}
public T getShape() {
return shape;
}
public String toString() {
return shape.toString();
}
}
//Test.java
public class Test {
public static void main(String[] args) {
// Circle만 상속을 받았기 때문에 Circle만 Generic이 가능합니다.
GenericEX<Circle> p = new GenericEX<>();
p.setShape(new Circle());
Circle p2 = p.getShape();
// GernericEX<Rectangle> r = new GenericEX<>();
// Rectangle은 상속 받지 못했기 떄문에 불가
}
}
Generic 메서드
public <자료형 parameter> 반환형 메서드 이름(자료형 parameter){}
//Point.java //두 점 class
public class Point<T, V> {
T x;
V y;
Point (T x, V y) {
this.x = x;
this.y = y;
}
public T getX() {
return x;
}
public V getY() {
return y;
}
}
//GenericMethod.java
public class GenericMethod {
publis static <T, V> double pointAdd(Point<T, V> a, Point<T, V> b) {
double x = ((Number)a.getX()).doubleValue();
double y = ((Number)b.getY()).doubleValue();
return x + y;
}
}
//Test.java
public class Test {
public static void main(String[] args) {
Point<Integer, Double> a = new Point<Interger, Double>(0, 0.0);
Point<Integer, Double> b = new Point<>(10, 10.0);
double result = GenericMethod.<Integer, Double>pointAdd(a,b);
System.out.println(result);
}
}
반응형
'Tip and Error > JAVA' 카테고리의 다른 글
Class 클래스 <자료형을 모르는 Class 사용 할 때> (0) | 2021.04.17 |
---|---|
JAVA 컴파일 과정 (0) | 2021.04.17 |
toString() & equals() & hashCode() & clone() (0) | 2021.04.16 |
default & static & private (0) | 2021.04.16 |
인터페이스 활용 (interface) (0) | 2021.04.14 |
공지사항
최근에 올라온 글