2016-07-27 7 views
-3

제네릭 형식을 반환하는 메서드가 있어야합니다. 부모 클래스와 10 개의 하위 클래스가 있다고 가정 해 보겠습니다. 부모 클래스에는 정의 된 메소드가 없으며 하위 클래스에는 다른 기능이 있습니다 (둘 다 공통입니다). 입력에 따라 하위 클래스의 객체를 만들고 싶습니다. (클래스의 메서드를 호출 할 수 없으므로 부모 개체를 만들 수 없습니다.) 그래서 객체를 생성하고 main 함수로 리턴하는 함수를 작성하고 싶습니다. 그리고 저는 T를 리턴 타입으로 붙잡고 싶습니다. main에서 어떻게 호출해야합니까?Java에서 일반 반환 형식의 메서드를 호출하는 방법

public static <T> T fun() { 
    if (some condition) { 
     return new Class1(); 
    } else { 
     return new Class2(); 
    } 
} 

올바른 클래스로 함수를 호출하려면 어떻게해야합니까?

Class xyz = fun(); 
+0

'일부 조건'을 true 또는 false로 지정하면 분명 할 수 있습니까? – Sufian

+1

메서드에 반환 형식이 없어 유효하지 않은 Java입니다. 'Class1'도'Class2'도'T'와 호환되지 않기 때문에 작동하지 않습니다.'T' 타입을 반환한다고 가정합니다. 리턴 타입이'T'라고 가정되지 않는다면'T'의 포인트는 무엇입니까? – Andreas

+1

코드를 살펴 보니 제네릭과 그 사람들이 할 수있는 것을 완전히 이해하지 못했다고 생각합니다. 당신은 정말로 *하려고합니까? – Andreas

답변

0

당신은 매개 변수로 전달해야 당신이

public <T> T getAsObject(Class<T> clazz) { 
    T bean = null; 
    try { 
     // do whatever you want to assign bean 
    } catch (Exception e) { 
     try { 
      bean = clazz.newInstance(); 
     } catch (Exception ex) { 
      // some log 
     } 
    } 
    return bean; 
}  

그래서 당신은 매개 변수로 사용되는 클래스를 상속 클래스와 함께 사용할 수있는 응답으로 사용하려는 어떤 클래스 유형

예 :

public abstract class Parent { 

    public Parent() { 
    } 

    public abstract void doit(); 
} 

public class Child1 extends Parent { 

    @Override 
    public void doit() { 
     // do something 
    } 
} 

public class Child2 extends Parent { 

    @Override 
    public void doit() { 
     // do other something 
    } 
} 

이제는 다음과 같이 사용할 수 있습니다.

Parent parent = getAsObject(Child1.class); 
// or 
Parent parent2 = getAsObject(Child2.class); 
관련 문제