Closed GoogleCodeExporter closed 9 years ago
对了,还有一点InjectBySetter中的valueType是直接使用实体类型的��
�的....
Original comment by zkgale@gmail.com
on 12 May 2010 at 3:20
想了半天,这个地方可不可以这样解决:
getInjecting方法返回一个指定属性所有set方法列表,而在注入的�
��候对所有set方法进行递归注
入,如果一个方法抛异常,则转到下一个,如果所有方法都抛异��
�的话,才说明注入失败
因为这种方案的话,要改变的地方有点多,我也就没有去实现了
Original comment by zkgale@gmail.com
on 12 May 2010 at 4:22
我这个地方按上面的思路做了一点实现,那们大大看看吧,
恩,没有专门写测试用例,只是简单的测试了一下,还有,有些地�
��可能要调整的,我这里只是提出一些
我的实现,如果可以用的话,还是要修改的...
Original comment by zkgale@gmail.com
on 12 May 2010 at 6:49
Attachments:
额, 据闻这不是多态, 是重载...
我觉得这样的需求应该不多,暂时降低优先级吧.
Original comment by wendal1985@gmail.com
on 12 May 2010 at 7:46
管它叫什么,反正就那意思嘿嘿嘿嘿嘿嘿
Original comment by zkgale@gmail.com
on 12 May 2010 at 7:49
你测试过吗?
我是说,如果你的setter 是 setLabels(List<String> strList)
而你的参数是 "['a','b','c','d']" // 一个 JSON 字符串
那么,应该会被正确转换的
如果你的 setter 是 setLables(String[] strList)
那么你的参数可以为下面两种形式
> "a,b,c,d,e"
> "['a','b','c','d']"
详细的转换代码,请参看
org.nutz.castor.castor.String2Collection
org.nutz.castor.castor.String2Array
Original comment by zozoh...@gmail.com
on 13 May 2010 at 6:58
Original comment by zozoh...@gmail.com
on 13 May 2010 at 7:07
恩,我这里提到的重载注入,并不是指框架来实现对数据的拆分
,而是指当实体对同一属性有多种
setter方法的时候,框架应该根据不同的参数类型去选择相应的s
etter方法,
而且具体的转换规则由使用者自己定义.
因为现在方法注入只选择一个....如果这个方法出现类型转换�
��败,则会出错
Original comment by zkgale@gmail.com
on 13 May 2010 at 7:21
那个是类型转换框架 Nutz.Castor 的任务。
我们只追求,在合理的情况下,能完成转换任务。
极端的情况下,则可以通过 直接注入
Request,或者将入口函数参数声明成字符串形
式的,来避免。
而现在,我们似乎还没看到一个比较合理的例子来说明:“��
�个 POJO 的某个字段必须有两个
setter,否则某些功能就实现不了或者实现
起来非常繁琐”
Original comment by zozoh...@gmail.com
on 13 May 2010 at 1:27
[deleted comment]
来点直接的吧,
//文章
class article{
List<String> labs = new ArrayList<String>(); //标签,这个应该可以理解吧,现
在很多文章都有这东西,就理解成关键字也可以
public void setLabs(List<String> labs){
this.labs = labs;
}
public List<String> getLabs(){
return labs;
}
//上面的都没问题吧///////////////////////////////////////////////
//我希望传一个字符串过来,然后我自己进行解析
//格式:"电脑,发展史,冯若依曼,笔记本"
public void setLabs(String labs){
for(String s : labs.splis(",")){
this.labs.add(s);
}
}
}
就上面这个类,如果我对labs进行注入
"电脑,发展史,冯若依曼,笔记本" 会有什么情况呢?
会抛异常(见附件),为什么呢?因为nutz
不能判断是注入那个方法的,默认注入
setLabs(List<String>
labs),因为labs的类型就是List<String>,所以理所当然的就只找参数
类
型为List<String>的咯,是吧.
但是这种方法重载的情况本身就是面向对象语言特性的一种,�
��以出现这种情况是无可厚非的.
或许有人会觉得,小样,你不知道把
"电脑,发展史,冯若依曼,笔记本" 组装成 [电脑,发展史,冯
若依曼,笔记本]
的形式吗?是,我是可以这样组装,但是,是不是我要多写几条语�
��来进行这种组
装呢?是不是每个重载的地方我都要进行这样的组装呢?再有,��
�实体里面都已经有一个现成的转换
方法了,为什么我还要去多写几条语句呢???
或许List<String>可以以[XX,YY]的形式,那其它的情况也可以这样吗
???
我这段时间在用google api engine
来写个小东西,里面String不能太长,所以只能使用GAE提供的
Text来存储,但是问题来了,String不能自动封装成Text,而Text也不��
�直接转成我要的String,那
我想请问,我这个实体应该怎么写???我是只写一个setXX(String
x)呢,还是只写一个setXX(Text
x)呢???我在JAVA中处理我可以全部使用setXX(String
x),但是我在从数据库得到值的过程中则必
须使用setXX(Text x),别告诉我在每个地方都让我进行转换处理...
zozohtnt大大说得对,你对Nutz.Castor给我转下String->Text看看,
并且,难道不觉得nutz不应该主动去进行复杂的类型转换吗?基��
�数据类型进行转,这是无可厚非
的,但是nutz的目的不是为用户进行类型转换,而是为用户的实��
�在适当的情况下,注入适当的值,
你管他被注入后怎么处理呢?只要他传过来的东西能塞到实体�
��面就行了,不是吗???但现在nutz情
况却是,我要正常的值根本就塞不进去,而且还报错....
Original comment by zkgale@gmail.com
on 15 May 2010 at 7:27
Attachments:
如果可能的话,我还是希望能各位看看我之前传上来的实现...
Original comment by zkgale@gmail.com
on 15 May 2010 at 7:36
我已经把你加入 http://code.google.com/p/nutzlab
请将代码上传到这里. 非常感谢你热心支持 ^_^
Original comment by wendal1985@gmail.com
on 15 May 2010 at 8:39
关
Original comment by wendal1985@gmail.com
on 30 Jan 2012 at 8:46
Original issue reported on code.google.com by
zkgale@gmail.com
on 12 May 2010 at 3:16