为什么看起来比以前的铸造方式更好?Java泛型
MyObj obj = someService.find(MyObj.class, "someId");
与
MyObj obj = (MyObj) someService.find("someId");
为什么看起来比以前的铸造方式更好?Java泛型
MyObj obj = someService.find(MyObj.class, "someId");
与
MyObj obj = (MyObj) someService.find("someId");
另一个优点,使用明确的类型参数是允许使用Proxy
(在这种情况下MyObj
将需要MyInterface
)要实现的服务方法。没有明确的类型参数,这是不可能的。
您可以使用覆盖下Proxy
原因是多方面的(测试一)
有没有保证非仿制药版本将返回一个类型的“MyObj中”的对象,所以你可能会得到一个ClassCastException。
在情况1中,如果没有找到类型为MyObj
的编号为someId
的对象,则大多数执行良好的服务将能够返回null。此外,第一种情况使得服务可以具有特定的逻辑来处理类型为MyObj
的类。在案例2中,除非你使用instanceof(如果可能的话避免),那么你冒着一个丑陋的ClassCastException
冒险,你将不得不赶上和处理。
为什么第一种方案更好的一个原因是find(Class,String)
方法现在知道它的返回值分配给了什么。因此,它现在能够在内部进行任何相关的演员,而不是简单地希望返回正确的类型。例如,假设find
方法在用"someId"
调用时在内部查找String
对象。方法可以具有将String
转换为MyObj
实例的策略。
这是不是更好。可以说它更糟糕,除非在特定的情况下。只有当你需要这样的事情时,目标需要在类对象 - 工厂方法和东西上调用newInstance()(等)。
如果您想保存电子,顺便说一句,这也将工作
MyObj obj = someService.find((Class<MyObj>) null, "someId");
谁说,这是更好? – Milhous 2009-02-23 19:44:33