2016-07-27 80 views
-3

我想要一個返回泛型類型的方法。假設我有一個父類和10個子類。父類沒有定義任何方法,並且子類具有不同的功能(它們都沒有共同之處)。我想根據一些輸入創建一個子類的對象。 (由於我無法調用類的方法,因此無法創建父對象)。所以我想寫一個函數來創建對象並返回主函數。我想抓住T作爲返回類型。我如何從main調用。如何在java中調用帶泛型返回類型的方法

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

如何爲正確的類調用函數?

Class xyz = fun(); 
+0

是不是很明顯,你會這樣做,通過使「一些條件」真或假嗎? – Sufian

+1

這不是有效的Java,因爲該方法缺少返回類型。它也不起作用,因爲'Class1'和'Class2'都不兼容'T',假設你想返回類型'T'。如果返回類型不應該是'T',那麼'T'的意義是什麼? – Andreas

+1

從那裏看代碼,我的猜測是你沒有完全理解泛型和他們能做什麼。你真的*試圖做什麼? – Andreas

回答

0

你應該通過爲參數的Class類型要作爲響應使用

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);