Java 解释泛型如何在此方法中工作
我一直在谷歌AdWords上工作,遇到了这段代码 adwords-api-6.4.0,com.google.api.adwords.lib.AdWordsUser 您能解释一下泛型是如何在getService方法中工作的吗?如何确定退货类型?Java 解释泛型如何在此方法中工作,java,generics,Java,Generics,我一直在谷歌AdWords上工作,遇到了这段代码 adwords-api-6.4.0,com.google.api.adwords.lib.AdWordsUser 您能解释一下泛型是如何在getService方法中工作的吗?如何确定退货类型? 这种用法的目的是什么?它似乎没有提供类型安全性。 这个用法是否有一个特定的名称(这样我就可以找到关于它的更多信息并更改问题标题)?我对C的了解比Java多,但我想getService方法会使用AdWordsService类型的参数,并返回一个类型T,该类型
这种用法的目的是什么?它似乎没有提供类型安全性。
这个用法是否有一个特定的名称(这样我就可以找到关于它的更多信息并更改问题标题)?我对C的了解比Java多,但我想
getService
方法会使用AdWordsService
类型的参数,并返回一个类型T
,该类型必须从Java.rmi.Remote
派生
大概,AdWordsServiceFactory.generateServicesTub
方法返回类型为java.rmi.Remote
或类似类型,因此将其转换为T
类型是合法的
在C#中,泛型以这种方式使用以避免转换,但转换仍在这里进行。我想使用这个特殊的方法,可以让你告诉泛型方法你想要的类型,从而使你不必强制转换到你想要的类型
我还可以想象,您需要在调用getService
时指定T
的类型。也许是这样
AdGroupServiceInterface adGroupService = user.getService<AdGroupServiceInterface>(AdWordsService.V200909.ADGROUP_SERVICE);
AdGroupServiceInterface adGroupService=user.getService(AdWordsService.V200909.ADGROUP\u服务);
编译器通常可以从调用上下文推断返回类型。在提供的示例中,编译器推断泛型类型为AdGroupServiceInterface
,因为结果被分配给该类型。如果没有可从中推断返回类型的上下文,则必须显式指定它:
user.<AdGroupServiceInterface>getService(svc);
user.getService(svc);
但是,getService
方法不是类型安全的。即使它包含一个cast,这也只能确保结果实现java.rmi.Remote
接口。由于Java泛型中的类型擦除,确切的类型T
未知,强制转换无法检查以确保结果是AdGroupServiceInterface
这就是编译器将警告不安全强制转换的原因—当结果分配给AdGroupServiceInterface
变量时,将引发ClassCastException
,而不是在方法及其catch块内。在java中,而不是user.getService(…)
AdGroupServiceInterface adGroupService = user.getService<AdGroupServiceInterface>(AdWordsService.V200909.ADGROUP_SERVICE);
user.<AdGroupServiceInterface>getService(svc);