728x90
SMALL
package test01.generics01;
class Apple {
public String toString() {
return "apple";
}
}
class Orange{
public String toString() {
return "Orange";
}
}
class AppleBox {
private Apple ap; // 참조 변수 선언, 멤버 필드
public Apple getAp() {
return ap;
}
public void setAp(Apple ap) { //new 없다는게 중요해요~
this.ap = ap;
}
}
class OrangeBox {
private Orange o;
public Orange getO() {
return o;
}
public void setO(Orange o) {
this.o = o;
}
}
public class FruitAndBos {
public static void main(String[] args) {
//과일 담는 박스 생성
AppleBox aBox = new AppleBox();
OrangeBox oBox = new OrangeBox();
//과일을 박스에 담는다.
aBox.setAp(new Apple());
oBox.setO(new Orange());
//박스에서 과일을 꺼낸다
Apple ap = aBox.getAp();
Orange og = oBox.getO();
System.out.println(ap);
System.out.println(og);
}
}
OrangeBox, AppleBox따로 안만들고 Box만 만들어서 깔끔하게 만들 수 있다
과일 꺼낼 때
Apple ap = (Apple)aBox.get(); 이러케...? ㅠㅠ
제네릭: <>꺽새를 쓰고 이 안에 넣으면 T로 된 것이 다 바뀜
클래스단위로 들어가야하기때문에 int가 아닌 Integer로 해야됨
ArrayList<DBox> arr = new ArrayList<DBox>();
System.out.println(arr.get(0));
어레이리스트 객체생성 > set > add> 0인덱스 출력
헷갈려~~~~
- 제네릭제네릭제네릭
package test06.generics05;
class Box<T> {
private T ob;
public T get() {
return ob;
}
public void set(T ob) {
this.ob = ob;
}
}
public class BoxInBox {
public static void main(String[] args) {
Box<String> sBox = new Box<>();
sBox.set("I am so happy.");
Box<Box<String>> wBox = new Box<>();
wBox.set(sBox);
Box<Box<Box<String>>> zBox = new Box<>();
zBox.set(wBox);
System.out.println(zBox.get().get().get());
}
}
I am so happy.
이게 뭐란말이냐
뭔말이란말이냐ㅠ
package test06.generics06;
class Box<T extends Number> {
private T ob;
public T get() {
return ob;
}
public void set(T ob) {
this.ob = ob;
}
}
public class BoundedBox {
public static void main(String[] args) {
Box<Integer> iBox = new Box<>();
iBox.set(24);
System.out.println(iBox.get());
}
}
T에 Number클래스만 오게해야됨 apple이런거 안됨 왜냐면 Number은 숫자만 있는 뭐 걔네니까...
제네릭에만 상속이 들어간거임
- 인터페이스 제네릭
package test06.generics07;
interface Eatable { //인터페이스
public String eat();
}
class Apple implements Eatable { //인터페이스를 구현한 Apple
}
class Box<T extends Eatable> {
//eatable를 상속받은 T..가 아니라 Eatable을 구현한 클래스만 T자리에올수있음(헷갈림 주의 상속아님)
}
public class BoundedInterfaceBox {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
eatable를 상속받은 T..가 아니라 Eatable을 구현한 클래스만 T자리에올수있음(헷갈림 주의 상속아님)
package test06.generics07;
interface Eatable { //인터페이스
public String eat();
}
class Apple implements Eatable { //인터페이스를 구현한 Apple
public String toString() {
return "I am an apple.";
}
@Override
public String eat() {
return "It tastes so good!";
}
}
class Box<T extends Eatable> {
private T ob;
public void set(T o) {
ob = o;
}
public T get() {
System.out.println(ob.eat());
return ob;
}
}
public class BoundedInterfaceBox {
public static void main(String[] args) {
Box<Apple> box = new Box<>();
box.set(new Apple());
Apple ap = box.get();
System.out.println(ap);
}
}
<T> Box <T> 리턴타입 (void처럼)
static: 공용의 공간
package test06.generics08;
class Box<T> {
private T ob;
public void set(T o) {
ob = o;
}
public T get() {
return ob;
}
}
class BoxFactory {
//static T a ; //멤버필드 xx
//static 제네릭 메소드
public static <T> Box <T> makeBox(T o) {
Box<T> box = new Box<T>();
box.set(o);
return box;
}
}
public class GenericMethodBoxMaker {
public static void main(String[] args) {
Box<String> sBox = BoxFactory.makeBox("Sweet");
System.out.println(sBox.get());
Box<Double> dBox = BoxFactory.makeBox(7.59);
System.out.println(dBox.get());
}
}
- static 메소드
728x90
LIST
'JAVA > Java' 카테고리의 다른 글
20201028_23 자바리뷰 (0) | 2020.10.28 |
---|---|
20201020_19 2차원배열 (0) | 2020.10.20 |
20201019_18 영업실적프로그램 (0) | 2020.10.19 |
20201019_18 (0) | 2020.10.19 |
20201016_17 네트워크 (0) | 2020.10.16 |
댓글