2016-07-27 84 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);