泛型返回类型:如何从许多可能的返回类型中捕获返回类型?

时间:2016-03-14 07:29:21

标签: java

写这个标题对于这个问题来说有点棘手:p

这是一个基本的java查询!
我正在使用谷歌云,它有不同的方法,如launchInstance,listInstances和terminateInstance等。这里,launchInstance将返回一个类型String作为成功或失败,listInstances将返回ArrayList,等等。

现在,我想要一个泛型返回类型,所以我创建了一个包含status,reason和dataRequired等数据条目的类,它最终将发送所需的数据,即String或ArrayList或HashMap。 我该如何实现此功能。 以下是我正在考虑的示例代码:

public class ResponseHelper {

    private String status;
    private String reason;
    private String type;
    private Object data;

    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public String getReason() {
        return reason;
    }
    public void setReason(String reason) {
        this.reason = reason;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }

    public void dataRequired(Object data) {
        switch(getType()) {
        case "ArrayList": this.data=(ArrayList<String>)data;

        }

    }

}

1 个答案:

答案 0 :(得分:0)

如果你需要Java中任何对象的Generic返回类型,只需返回Object作为类型。(而不是为它创建一个单独的新类)然后你可以检查它是哪个对象并做你的东西。下面是一个简单的程序,你可以从中得到一个想法

public class GenericReturn {

    public static void main(String[] args) {
        Object output = returnMeSomething(2);
        System.out.println(output.getClass().getSimpleName());
        output = returnMeSomething(1);
        System.out.println(output.getClass().getSimpleName());
        output = returnMeSomething(0);
        System.out.println(output.getClass().getSimpleName());
    }

    /** This can return any Object you want as it has Object as return type*/
    public static Object returnMeSomething(int num) {
        if (num == 1) {
            return "Test";
        }
        else if (num == 2) {
            return new HashMap();
        } 
        return new ArrayList();
    }
}

此输出如下

HashMap
String
ArrayList