

class Box<D>{
D data;
}
public class GenericEx01 {
public static void main(String[] args) {
Box<String> box1 = new Box();
Box<Integer> box2 = new Box();
box1.data = "1";
box2.data = 1;
}
}
class Box1{
static Object data;
}
public class GenericEx02 {
public static void main(String[] args) {
Box1.data = "1";
Box1.data = 1;
}
}
class Dog{
String name;
int age;
void speak(){
System.out.println("BowWow");
}
}
class Cat{
String name;
int age;
void speak(){
System.out.println("naaong");
}
}
public class GenericEx03 {
public static void main(String[] args) {
Object[] arr = new Object[2];
arr[0]=new Dog();
arr[1]=new Cat();
Dog d1 = (Dog) arr[0];
Cat c1 = (Cat) arr[1];
d1.speak();
c1.speak();
}
}
class Model{
private static Model instance = new Model();
public static Model getInstance(){
return instance;
}
private Model(){
}
private Object data;
public void setData(Object data){
this.data = data;
}
public Object getData(){
return data;
}
}
class User{
public int id = 1;
public String name = "홍길동";
public String email = "ssar@nate.com";
public void hello(){
System.out.println("안녕하세요.");
}
}
public class GenericEx04 {
public static void main(String[] args) {
Model model = Model.getInstance();
User user = new User();
model.setData(user);
User ob = (User) model.getData();
ob.hello();
}
}
class Model0<T> {
private T data;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
class User0{
public int id = 1;
public String name = "홍길동";
public String email = "ssar@nate.com";
public void hello(){
System.out.println("안녕하세요");
}
}
public class GenericEx05 {
public static void main(String[] args) {
Model0<User0> model0 = new Model0();
model0.setData(new User0());
User0 user0 = model0.getData();
user0.hello();
}
}
Object를 사용해야 하는 경우
미리 만들어져 있는 static은 new 불가능 (사용자가) ⇒ Object, 즉 Generic으로 사용 불가능
= 사용자가 어떤 타입을 사용할 지 모를 경우에 개발자는 object 사용 → 다운 캐스팅으로 코딩

Share article