??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
略D一例,qx我们工作中要删除某条数据Q一般不是真?/span>delete掉,而是用一?/span>status标识Q?/span>status?/span>-1表示删除Q你写删除接口时完全可以q么写:
Class UserService{
private UserDao userDao;
public void deleteUser(User user){
user.setStatus(-1);
userDao.update(user);
}
}
q个逻辑其实执行的是更新操作Q但接口名仍?/span>deleteUserQ因为它提供的确实是删除“服务”Q调用接口时我只需要知道我调用q个接口时会删除对象Q至于它怎么实现Q我不着?/span>
Java中到处是指针引用Q习惯了使用c语言指针的程序员往往会ؕ用指针,而破坏了面向对象的思想Q比如,我要查询某个用户的密码,有h可能会这么写Q?/span>
Class UserService{
private UserDao userDao;
public void queryUserPasswd(int id,User user){
String passwd=userdao.getUserPasswd(id)
User.setPasswd(passwd);
}
}
q种写法在语法上没什么问题,也能得到正确的|但传?/span>user对象q来有些不妥了Q我要得到密码,传个用户的密码,只要l个id可以把密码q回l调用者了Q干嘛要让h再传个对象进来?
作ؓ一个项目经理,在工作过E中Q确实会遇到令h哭笑不得的接口,像上面那个删除接口吧,有h会这么写Q?/span>
Class UserService{
public void deleteUser(UserDao userDao ,User user){
user.setStatus(-1);
userDao.update(user);
}
}
q接口写得,让h怸着头脑了,我删除一?/span>user对象Q还要传?/span>userDaol你Q意思是你ؓ我提供服务,我还要给个工L你,q说不通吧Q?/span>
Java是纯_的面向对象语言Q写JavaE序时要时刻CQ你在ؓ别h提供服务Qؓ别h提供服务׃应该提出q多的附加要求。这个问题在使用MVC模式分层思想的时候体现得更加严重。在使用MVC模式开发的时候,往往整个项目分成几层:action层?/span>service层、数据库处理层(dao层){等Q每一层往往׃同的E序员编写,q时候要格外提醒自己在ؓ别h提供服务。在一个新目开始的时候往往会出C个问题:在增加某条数据时Q要对这条数据的字段q行验证Q不能ؓI或者长度过长等{,如果没有验证Ҏ抛错Q在分层~写接口Ӟ开发h员经常想q个验证应该在上层或者下层做吧,我这边得到的数据是正的Q最后导致谁都没做验证。只要你C了提?#8220;服务”的思想Q就不应该要求别人给你的数据是正的Q而是应该处理各种非正帔R题,保证用户l你的Q何数据你都能l出相应的返回,当然Q在实际的项目中目l理可能规定数据验证?/span>service层做?/span>
Android Adapter 是将数据l定?/span>UI 界面上的桥接cR?/span> Adapter负责创徏和显C每个项目的?/span>View和提供对下层数据的访问。支?/span>Adapterl定?/span>UI控g必须扩展Adapter View抽象cR创ql承?/span>AdapterView的控件和创徏新的AdaptercLl定它们是可能的?/span>
Android pȝ本n提供了两U现成的Adapter 供我们用?/span>
1.ArrayAdapterQ它是一个绑?/span>ViewCl对象的通用cR默认情况下Q?/span>ArrayAdapterl定每个对象?/span>toString值到layout中预先定义的TextViewI间上。构造函数允许用户用更加复杂的Layout或者通过重写getViewҎ来扩展类从而?/span>TextView的替代物
2.SimpleCursorAdapterQ它l定View?/span>Content Provider 查询q回的游标上。指定一?/span>XML layout定义Q然后将数据集的每一列的值绑定到layout中的一?/span>View
写自qAdaptercd现更多复杂的UI界面和数据绑?/span>
主要重蝲getCount ҎQ?/span>getViewҎ getItemҎ getItemIdҎQ?/span> 参数解析Q?/span>contextQ传入的上下?/span>Activity, items l定数据的列?/span>, resource layout布局ID, tags l定数据?/span>key, ids Item 中对?/span>key的资?/span>ID?/span> ?/span>getView中自定义Item里面的事件监听,自定义新的重载后的显C界面返?/span> convertView?/span> 如果需要用到父类SimpleAdapter 昄效果需要调?/span>super.getViewҎ?/span> convertView 赋倹{?/span>
再来看看equals()的?nbsp;
在java中有q两U情况存在:
1、用objectcM的equals()ҎQ这个是java中最初的equals()Ҏ
如果你自定义一个类AQƈ且没有去l承其他的类Q这时A中的equals()
的功能就是比较两者储存值的地址是否相同。因为所有的c都l承object
c,而objectcM有equals()q样的方?/span>
objectcM的equals()Ҏ的源代码如下Q?/span>
public boolean equals(object obj)
{
return this == obj;
}
从这D代码中Q我们可以再ơ确定,q种情况下的equals()Ҏ的功能是
比较两者储存值的地址?/span>
2、自定义一个类BQ但Bcȝ承了cc,而ccM的equals()Ҏ已经被重写过
了,q种情Ş需要具体情况具体分析了Q但大部分被重写的equals()?/span>
法所拥有的功能就是比较两者储存值的内容是否相同Q而不再是比较地址
了。比如:创徏一个String对象 String str1 = new String("1");
String str2 = new String("1");
q时str1.equals(str2)比较的就是str1和str2中储存值的内容是否相同
了,因ؓStringcM的equals()p重写了,但这q不意味着所有被重写
q的equals()Ҏ都是用来比较内容?因ؓ目前我所遇到的只有这U情
况,如果大家有兴可以去多研I研I?/span>
ȝ:"=="只有一U用法,而equals()有两U用法,只是所使用的环境不一栯已?/span>