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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java泛型类的继承关系
引言类型兼容的对象可以进行赋值,如可将一个 Integer 对象传给一个 Object 对象,因为 Object 是 Integer 的基类。Object someObject = new Object(); Integer someInteger = new Integer(10); someObject = someInteger; // OK对于方法的参数,也可传递类型兼容的对象。如 In
带有泛型的类如何继承
带有泛型的类如何继承public class GenericityTst { public class Temp { } //具有泛型的ClassA public class ClassA<T>{ T t; } //继承泛型 public class ClassB<T> extends ClassA<T>{ T t;
JAVA学习心得--继承、接口与泛型
1、JAVA不支持多重继承,子类只能有一个父类。类声明中,用关键字extends来声明一个类是另外一个类的子类。2、子类和父类在同一个包中,子类自然继承了其父类中不是private的成员变量和方法作为自己的,访问权限不变。不在同一个包中,子类继承父类的protecded,public成员变量和方法,子类不能继承父类的友好变量和方法。3、在子类中定义的成员变量只要和父类中的成员变量同名时(不管变量的
Java 泛型在类继承方面的使用
对泛型的了解不多,最近了一个类继承方面的包装,更进一步了解泛型能如何使用。 需求如下: 有一个工厂类,通过工厂类去生产一个 Consumer。 Consumer 需要调用 setMessageListener 方法去设置一个 IMessageListener。 这个 IMessageListener 有一个方法onMessage(Object message) 现在需要,使用者在使用on
Java泛型 泛型类型的继承规则
泛型类型的继承规则可能不能凭直觉的来想当然。下面举个例子来看看泛型类型的继承规则。 首先有几个辅助类: package generic; public class Person extends Animal { private String name; public Person(String name) { super(); this.name = name; } pu
泛型继承的几种写法
泛型 继承
Java -- 泛型类型的继承规则(四)
Java -- 泛型类型的继承规则(四) 使用泛型类时,我们有必要连接一些泛型类之间有关继承和子类型的准则。先看要使用的代码示例:class Basic { public void f() { System.out.println("f() int Basic"); } public void g() { System.out.println("g() int Basi
泛型(包括泛型抽象类的继承)
泛型 泛型 一、什么是泛型? 通过泛型可以定义类型安全类,而不会损害类型安全、性能或工作效率 二、实例化泛型 1、可以使用任何类型来声明和实例化 2、申明和实例话都必须用一个特定的类型来代替一般类型T 3、例子: //原来写法 Public   class   Stack { object[]   m_Items; public   void
Java泛型 继承中类型变量的关系
通过例子来看泛型类在继承中过程中类型变量应该具有怎样的关系。 首先给出几个辅助类: package generic; public class Animal { } package generic; public class Person extends Animal { private String name; public Person(String name)
C# 泛型类的继承
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 泛型._02泛型类的继承 {     public class Person         where T : class