java入门学习(七)
来源:互联网 发布:阿里云备份 编辑:程序博客网 时间:2024/05/20 17:41
弄Service层,处理继承和泛型时还遇到一点小问题,也还是记录一下吧。
整体结构同dao层,分接口和实现类,接口有个父接口BaseService,实现也有个父类BaseServiceImpl。
主要记录一下遇到的一点小问题吧。开始设想是在BaseServiceImpl中定义一个公共的protected变量:BaseDao,用以实现每个Service关于自己对应实体的基本操作:
package mybatistest.service.impl;import java.io.Serializable;import mybatistest.dao.BaseDao;import mybatistest.service.BaseService;public abstract class BaseServiceImpl<T, PK extends Serializable> implements BaseService<T, PK>{protected BaseDao mainDao;public T getByID(PK id){return (T) mainDao.getByID(id);};}
UserServiceImpl.java
package mybatistest.service.impl;import mybatistest.dao.impl.UserDaoImpl;import mybatistest.entity.User;import mybatistest.service.UserService;public class UserServiceImpl extends BaseServiceImpl<User, String> implementsUserService {public UserServiceImpl() {mainDao = new UserDaoImpl();}public String userLogin(String userNumber, String userPassword) {User user = (User) mainDao.getByID("1");if (null == user) {return "用户不存在!";}if ("XXX" != userPassword) {return "密码不正确!";}return "登录成功!";}}
但这里发现三个问题:
1、BaseServiceImpl要做类型转换;
2、每个继承的子类使用时都要做强制转换;
3、对BaseDao子接口(比如UserDao)中实现的单独方法(未在BaseDao中定义的方法)调用前又要做强制转换;
这个不科学啊
eclipse真是强大,重新审视了一下代码,边改边看eclipse中的提示,结果发现是要这样:
BaseServiceImpl.java
package mybatistest.service.impl;import java.io.Serializable;import mybatistest.dao.BaseDao;import mybatistest.service.BaseService;public abstract class BaseServiceImpl<T, PK extends Serializable> implementsBaseService<T, PK> {protected BaseDao<T, PK> mainDao;public T getByID(PK id) {return mainDao.getByID(id);};}
UserServiceImpl.java
package mybatistest.service.impl;import mybatistest.dao.impl.UserDaoImpl;import mybatistest.entity.User;import mybatistest.service.UserService;public class UserServiceImpl extends BaseServiceImpl<User, String> implementsUserService {public UserServiceImpl() { mainDao = new UserDaoImpl();}public String userLogin(String userNumber, String userPassword) {User user = mainDao.getByID("1");if (null == user) {return "用户不存在!";}if ("XXX" != userPassword) {return "密码不正确!";}return "登录成功!";}}
这样就不用强制转换了,解决了1、2的问题。但发现3的问题还没有解决,还是要((UserDao) mainDao)强制转换一下才能使用UserDao中单独定义的方法。先标记一下,回头再网上查一下看看,是不是只能强制转换。
或者,Service层不适合继承?1、ServiceImpl中的方法,可能会用到多个Dao来实现某种业务逻辑;2、将来用Spring注入,对于这种继承好不好使呢?先放一下吧。
不得不说,java的泛型还是很强大。记得Delphi是在2009版才开始有泛型,且不完整。
0 0
- java入门学习(七)
- java 入门学习(七) 关键字之(一)
- java 从零开始,学习笔记之基础入门<数组>(七)
- OpenGL入门学习(七)
- OpenGL入门学习(七)
- OpenGL入门学习(七)
- OpenGL入门学习(七)
- Java学习(七)
- Java学习(七)
- OpenGL入门学习(七) 【转】
- MVC入门学习笔记(七)
- Android入门学习笔记整理(七)
- OpenGL入门学习[七]
- java学习笔记(七)
- Java学习笔记(七)
- Java学习笔记(七)
- Java学习笔记(七)
- java nio学习(七)
- WinForm界面开发
- android面试三
- KVC,KVO,NSNotification总结
- 查找之二分查找
- CTreeCtrl与CreateDragImage创建失败
- java入门学习(七)
- 重新编译Nginx指导手册【修复静态编译Openssl的Nginx漏洞 】[Openssl Heartbleed]
- 谁从汽车电子标准中获益
- HDU 3666 THE MATRIX PROBLEM 差分约束
- Fragment使用总结
- mac os x10.9下如何使用git与github
- POJ-2828 Buy Tickets
- Python3.x学习笔记[2.5]灵活使用urllib与re
- java 死锁及解决