2 smcdl smcdl 于 2016.05.04 08:47 提问

问一个Java泛型与类继承的问题

直接上代码了

//DeviceRepository类
 public abstract class DeviceRepository<T extends Device> extends DomainRepository<T> 

//DeviceEventHandler类第一种写法
 public abstract class DeviceEventHandler<M extends Device,R extends DeviceRepository<M>>

//DeviceEventHandler的子类针对第一种写法的继承
public class DefaultSmartControllerEventHandler extends DeviceEventHandler<SmartController, SmartControllerRepository>

//DeviceEventHandler类第二种写法
public abstract class DeviceEventHandler<R extends DeviceRepository<? extends Device>>

//DeviceEventHandler的子类针对第二种写法的继承
public class DefaultSmartControllerEventHandler extends DeviceEventHandler<SmartControllerRepository>

这两种写法在Eclipse中都编译通过了,但我不清楚他们之间有什么不同,如果哪位朋友知道请告知我,谢谢。
另外,针对第二种写法,我在DeviceEventHandler中通过R获取的是具体的Device类的对象,而第一种写法似乎可以写成通过R获取M类的对象。

4个回答

smcdl
smcdl   2016.05.25 20:59
已采纳

根据情况来看,第一种写法是适合的,因为一般Domain中的Model是从Repository中取出的,所以第一种写法中的Model可以根据M来变化,而第二种写法会麻烦一些,因为不论Repository中取出的是什么Model,最终只能被转型为Device,这在通常情况下是不可接受的。

CSDNXIAOD
CSDNXIAOD   2016.05.04 08:51

java 泛型 一个堆栈类
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

smcdl
smcdl   2016.05.04 08:55

另外,针对第二种写法,我在DeviceEventHandler中通过R获取的是具体的Device类的对象,而第一种写法似乎可以写成通过R获取M类的对象。

baidu_32688757
baidu_32688757   2016.05.04 10:18
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!