Java泛型转换

Java泛型转换,java,generics,Java,Generics,请如何在普通铸造后工作 private <T, N> N send(final T request) { final String serviceUrl = "someUri" try { return (N) webServiceTemplate.marshalSendAndReceive(serviceUrl, request); } catch (final SoapFaultClientException e) { } }

请如何在普通铸造后工作

private <T, N> N send(final T request) {
    final String serviceUrl = "someUri"

    try {
        return (N) webServiceTemplate.marshalSendAndReceive(serviceUrl, request);
    } catch (final SoapFaultClientException e) {

    }
}
此方法如何将此对象强制转换为MyResp对象? 这在返回类型中是什么意思:


该方法通过通用参数
T
N
进行参数化。它接受类型为
T
的参数,并返回类型为
N
的引用

返回类型不是
,它只是
N

不是返回类型。N是

private <T, N> N send(final T request)
               ↑
private N send(最终T请求)
↑
通过传递MyReq参数,您可以“选择”类型T。在返回marshalSendAndReceive的值之前,它将被强制转换为N类型。在你的情况下,MyResp

<T,N> 


只是声明这个类/方法是通用的,可以指定泛型输入类型和输出。

< P>它是关于在java中使用模板,类似于C++中的模板;p> 例如:

void add(T x, T y){
System.out.println(x+y);
}
上面的函数可以通过以下任一方法调用

add(3.0f, 4.5f);
add(2,3);

意味着,该函数适用于任何类型的参数

,此处
T和N
为通用参数

此处返回类型为
N


意味着该方法有两个类型参数,分别命名为
T
N
。返回类型为
N
<代码>私人。。。N。您的返回类型仅为
N
<代码>是泛型变量的一种初始化。这是泛型变量初始化的语法。不是返回类型而是N isOk,所以(N)webServiceTemplate.MarshalSendReceive只是将对象强制转换为N(MyResp)ok?为什么我不能直接返回N个对象?为什么我需要那里?允许您将send方法与任何T参数类型一起使用,并且该方法的返回值应为N类型。将N和T视为构造类/使用方法时要初始化的“变量”。相同的方法可能会获取字符串输入并返回整数输出。但在您的例子中,它接收到MyReq并返回MyResp。这就是Java中泛型的要点。此方法的非泛型版本是:
private MyResp send(final MyReq请求){final String serviceUrl=“someUri”try{return(MyReq)webServiceTemplate.marshalSendAndReceive(serviceUrl,request);}catch(final SoapFaultClientException e){}
semi-generic:
private Z send(final MyReq request){final String serviceUrl=“someUri”尝试{return(Z)webServiceTemplate.marshalSendAndReceive(serviceUrl,request);}catch(final SoapFaultClientException e){}
现在它可以返回任何标记为Z的类型,同时可以获取MyReq作为输入。
add(3.0f, 4.5f);
add(2,3);