怎么在泛型中使用限定类型的变量或者对象?

昵称是可以中文吗 2017-11-17 02:31:40
我写了一个类,限定类的传递类型,如
public class CrudService< T extends DataEntity<T>>

,当其他类继承这个类的时候,必须传递相应的类型,如
TProjectServiceImpl extends CrudService<TProject>
,
TProject必须定义为
public class TProject extends DataEntity<TProject>
,这个时候没有报错。

这时候,我如果定义
public class TProjectVO extends TProject
,
再调用T
ProjectServiceImpl extends CrudService<TProjectVO>
,这个时候会报错,请问, TProjectVO不是已经继承了TProject,为啥还提示报错呢?
...全文
574 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 6 楼 kampoo 的回复:
Java中的泛型有个问题,就是它在使用的时候必须 泛型类实例化。这句代码:
T extends DataEntity<T>
是个死循环,会让编译器无所适从。建议第一行这么修改(去掉 T extends,后面的代码也需要做相应修改 ):
public class CrudService<DataEntity<T>>
public class TProject
ProjectServiceImpl extends CrudService<DataEntity<TProject>>
T extends DataEntity<T> 是个死循环,会让编译器无所适从 但是我运行项目的时候没有报错哦
  • 打赏
  • 举报
回复
引用 11 楼 QQ95546772 的回复:
看看这种设计
WAFControlle是什么?为啥要多一层这样的东西?
欺骗性的伪装 2017-11-20
  • 打赏
  • 举报
回复

看看这种设计
  • 打赏
  • 举报
回复
引用 9 楼 u011594442 的回复:
[quote=引用 5 楼 SCAUSCNU 的回复:] [quote=引用 4 楼 yuzhongke888 的回复:] 你想要什么效果的? 为什么继承这么多次
TProject与数据库表字段一一对应的,VO是界面上的字段,字段个数可能比数据库的表多或者少。 我要的是TProjectVO能够利用TProject的字段,但是又不去破坏与数据库表一一对应的类TProject[/quote] 你是用mybatis还是herbinate呢,感觉这个问题被你问复杂了,你写这么绕的继承目的是什么呢?[/quote] herbinate的jpa自动生成表,如TProject与数据库表字段一一对应的。 就是类似于dto,vo这些啊,原有的表字段不变,新增的字段在vo中,统一提取createtime,updatetime这些属性到baseentity。我想要做的是不用每次修改都去操作非业务相关的字段
Sunyiban 2017-11-20
  • 打赏
  • 举报
回复
引用 5 楼 SCAUSCNU 的回复:
[quote=引用 4 楼 yuzhongke888 的回复:] 你想要什么效果的? 为什么继承这么多次
TProject与数据库表字段一一对应的,VO是界面上的字段,字段个数可能比数据库的表多或者少。 我要的是TProjectVO能够利用TProject的字段,但是又不去破坏与数据库表一一对应的类TProject[/quote] 你是用mybatis还是herbinate呢,感觉这个问题被你问复杂了,你写这么绕的继承目的是什么呢?
kampoo 2017-11-20
  • 打赏
  • 举报
回复
嗯 这个也许编译器能通过,但并不是良好的实践~~运行不报错 也许是因为编译器具备一定的容错能力,但在进一步扩展时会遇到麻烦。
kampoo 2017-11-19
  • 打赏
  • 举报
回复
Java中的泛型有个问题,就是它在使用的时候必须 泛型类实例化。这句代码:
T extends DataEntity<T>
是个死循环,会让编译器无所适从。建议第一行这么修改(去掉 T extends,后面的代码也需要做相应修改 ):
public class CrudService<DataEntity<T>>
public class TProject
ProjectServiceImpl extends CrudService<DataEntity<TProject>>
  • 打赏
  • 举报
回复
引用 4 楼 yuzhongke888 的回复:
你想要什么效果的? 为什么继承这么多次
TProject与数据库表字段一一对应的,VO是界面上的字段,字段个数可能比数据库的表多或者少。 我要的是TProjectVO能够利用TProject的字段,但是又不去破坏与数据库表一一对应的类TProject
雨中客888 2017-11-17
  • 打赏
  • 举报
回复
你想要什么效果的? 为什么继承这么多次
  • 打赏
  • 举报
回复
引用 2 楼 yuzhongke888 的回复:
你不是已经规定了CrudService的泛型必须T extends DataEntity<T>吗 那就应该是TProjectVO extends DataEntity<TProjectVO>
我间接继承了TProject,
TProjectVO extends DataEntity<TProjectVO>
这样写,相当于我又要重新写一遍TProject的属性, 有没有其他的办法?
雨中客888 2017-11-17
  • 打赏
  • 举报
回复
你不是已经规定了CrudService的泛型必须T extends DataEntity<T>吗 那就应该是TProjectVO extends DataEntity<TProjectVO>
雨中客888 2017-11-17
  • 打赏
  • 举报
回复
TProjectVO extends DataEntity<TProjectVO>

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧