如何在java中调用具有泛型返回类型的方法

如何在java中调用具有泛型返回类型的方法,java,generics,dynamic,types,generic-programming,Java,Generics,Dynamic,Types,Generic Programming,我想要一个返回泛型类型的方法。假设我有一个父类和10个子类。父类没有定义任何方法,而子类有不同的函数(它们都不相同)。我想根据一些输入创建子类的对象。(无法创建父对象,因为我无法调用类的方法)。所以我想写一个函数,在其中创建对象并在主函数中返回。我想把T当作返回类型。如何从main调用 public static <T> T fun() { if (some condition) { return new Class1(); } else {

我想要一个返回泛型类型的方法。假设我有一个父类和10个子类。父类没有定义任何方法,而子类有不同的函数(它们都不相同)。我想根据一些输入创建子类的对象。(无法创建父对象,因为我无法调用类的方法)。所以我想写一个函数,在其中创建对象并在主函数中返回。我想把T当作返回类型。如何从main调用

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

您应该将要用作响应的类类型作为参数传递

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;
}     
现在您可以这样使用它:

Parent parent = getAsObject(Child1.class);
// or 
Parent parent2 = getAsObject(Child2.class);

很明显,您会通过使“some condition”为true或false来实现这一点吗?这不是有效的Java,因为该方法缺少返回类型。它也不起作用,因为
Class1
Class2
都与
t
不兼容,假设您打算返回类型
t
。如果返回类型不应该是
T
,那么
T
的意义是什么?从那里的代码来看,我猜您不完全理解泛型以及泛型可以做什么。你到底想做什么?我想做的是返回class1或class2的对象,并将其分配给另一个函数中的对象。我想返回类型T。我添加了T作为返回类型,是的,我是泛型新手
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);