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

时间:2016-07-27 20:12:26

标签: java generics dynamic types generic-programming

我想要一个返回泛型类型的方法。让我们说我有一个父类和10个子类。父类没有定义任何方法,子类具有不同的功能(没有共同的功能)。我想根据一些输入创建子类的对象。 (因为我无法调用类的方法,所以无法创建父对象)。所以我想编写一个在其中创建对象并在main函数中返回的函数。我想把T作为返回类型。我如何从main调用。

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

如何调用函数以获得正确的类?

Class xyz = fun();

1 个答案:

答案 0 :(得分: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);