有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

静态方法中的Java类型推断

场景:我需要处理一个请求和响应场景,其中请求/响应的内部对象取决于请求代码。 所以我用了下面的方法

public static <T, U> Response getResponse(String requestCode, Request req) {
        Response response = new Response();

        T requestObject = (T) req.getInnerObject();

        RequestHandler<T, U> requestHandler = new RequestHandler<T, U>(
                requestCode, requestObject);

        U responseObject = requestHandler.getResponse();

        response.setInnerObject(responseObject);

        return response;
}

问题是,调用此方法时如何指定T和U? 我很惊讶我能做到

Response response = getResponse(requestCode, req);

我哪里弄错了

谢谢


共 (2) 个答案

  1. # 1 楼答案

    要指定T和U,可以如下方式调用方法:

    YourClass.<MyTClass, MyUClass>getResponse(requestCode, req);
    

    调用Response response = getResponse(requestCode, req);与调用new ArrayList()而不是new ArrayList<String>()一样有效

  2. # 2 楼答案

    您正在使用generic method。泛型方法是引入自己类型参数的方法。这类似于声明泛型类型,但类型参数的作用域仅限于声明它的方法。允许使用静态和非静态泛型方法以及泛型类构造函数

    要在代码中引用泛型方法,必须执行泛型类型调用,该调用使用一些具体值替换T和U,例如Integer:

    SomeClass.<Integer, String>getResponse(requestCode, req);
    

    有时,可以忽略显式提供的类型,编译器将推断出所需的类型。此功能称为类型推断,允许您将泛型方法作为普通方法调用,而无需在尖括号之间指定类型。阅读关于type inference的文章,了解更多信息