Java泛型

Jos*_*hua 5 java generics

为什么以下看起来比旧的铸造方式更好?

MyObj obj = someService.find(MyObj.class, "someId");

MyObj obj = (MyObj) someService.find("someId");

Out*_*mer 9

无法保证非泛型版本将返回"MyObj"类型的对象,因此您可能会获得ClassCastException.


Il-*_*ima 6

在案例1中,最完善的服务来实现将能够返回null,如果有ID为没有对象someId类型的MyObj可以找到.此外,第一种情况下,能够对服务有一些特定的逻辑特定与类型的类工作MyObj.

在第二种情况下,除非你使用的instanceof(避免可能的话),那么你冒着丑ClassCastException,你将不得不捕获并处理.


oxb*_*kes 4

使用显式类型参数的另一个优点是允许使用 a 来实现服务方法Proxy(在本例中MyObj需要是MyInterface)。如果没有显式类型参数,这是不可能的。

您可能会Proxy出于多种原因使用底层(测试其中一个)