求高手简化下面的语句
for(int i=1;i<=resus.size();i++)--------------------编程问答-------------------- 对象里面有4个不同的setMoney方法???? --------------------编程问答-------------------- switch处理吧 --------------------编程问答-------------------- 四个setMoney方法?
{
if(i==1) {
item.setMoney1(cashBudgetService.getMoney(c.getDailyFeeProject().getId(), c.getDailyCatalog().getId(),resus.get(i-1),companyId));
}
if(i==2) {
item.setMoney2(cashBudgetService.getMoney(c.getDailyFeeProject().getId(), c.getDailyCatalog().getId(),resus.get(i-1),companyId));
}
if(i==3) {
item.setMoney3(cashBudgetService.getMoney(c.getDailyFeeProject().getId(), c.getDailyCatalog().getId(),resus.get(i-1),companyId));
}
if(i==4) {
item.setMoney4(cashBudgetService.getMoney(c.getDailyFeeProject().getId(), c.getDailyCatalog().getId(),resus.get(i-1),companyId));
}
}
可以试试 只用一个setMoney方法,并添加一个参数比如flag;
setMoney方法内通过不同的flag进行处理 --------------------编程问答-------------------- 晕,你这for循环写的还有意义么。。。 --------------------编程问答-------------------- 是这个样子的
假设某个月总共有30天,我要在前台显示有数据的这几天的记录,类似下面这个样子
我用的前台框架是jquery easyui+volicety
我是想知道 可不可以加set变量化
比如写成下面这个样子:
for(int i=1;i<=resus.size();i++) { if(i==1) { item.setMoneyi(cashBudgetService.getMoney(c.getDailyFeeProject().getId(), c.getDailyCatalog().getId(),resus.get(i-1),companyId)); }
}
有没有类似的实现方式,变量必须要有这么多 --------------------编程问答-------------------- 我擦 不能显示图片 --------------------编程问答-------------------- 就是想知道可以不可以有类似这样的实现方式:
--------------------编程问答-------------------- 明显告诉你不可以。。。 --------------------编程问答-------------------- 用反射,方法名可以参数化 --------------------编程问答-------------------- 你那样写算什么呀?一个月有30天难道你要写30个if吗?1到30个item.setMoney???
for(int i=1;i<=resus.size();i++) {
if(i==1) { item.setMoneyi(cashBudgetService.getMoney(c.getDailyFeeProject().getId(),c.getDailyCatalog().getId(),resus.get(i-1),companyId)); }
}
因为每天的数据和某月某天没有任何的关系所以为什么不用一个setMoney方法呢? --------------------编程问答-------------------- 因为前台显示数据的时候必须要有参数名 --------------------编程问答-------------------- 类似这样子,field表示的是参数名称,我声明一个,我就只能显示一列
--------------------编程问答--------------------
columns:[[
#set ($_index = 1)
#foreach($day in $days)
{field:'money$_index',title:$day,width:fixWidth(0.1)},
#set($_index = $_index+1)
#end
{field:'applyMan',title:'申请人',width:fixWidth(0.1)},
{field:'memo',title:'备注',width:fixWidth(0.1)}
]]
for(int i=1;i<=resus.size();i++) { if(i==1) { item.setMoney(cashBudgetService.getMoney(c.getDailyFeeProject().getId(), c.getDailyCatalog().getId(),resus.get(i-1),companyId),i); }
}
这样不行吗? --------------------编程问答--------------------
for(int i=1;i<=resus.size();i++){--------------------编程问答-------------------- 如果不止4个setMoney,用反射吧,只有那4个的话,不如保持现状,可读性更高...更容易维护 --------------------编程问答-------------------- 这里的循环有意义? --------------------编程问答-------------------- 我猜楼主要写4块不同的内存区,在4种方法中实现的是写内存区的不同,比如起始位、写长度等。
item.setMoney(cashBudgetService.getMoney(c.getDailyFeeProject().getId(), c.getDailyCatalog().getId(),resus.get(i-1),companyId),i);
}
建议楼主将内存区作为枚举,比如起始位、写长度这些作为每个枚举的属性,因为这种东西必然是静态的亘古不变的东西,枚举可以很好的处理这种情况。
方法只需要一个,增加一个参数,即内存区枚举 --------------------编程问答-------------------- 不止4个 大概30个左右 --------------------编程问答--------------------
枚举就是用来做那些不会改变的声明的,数量不是问题 --------------------编程问答-------------------- 老夫观察你item.setMoney1的方法在循环中只是在根据i的值判断该调用哪个setMoney方法,
但是 setMoney1、setMoney2、setMoney3、setMoney4这四个方法只有resus.get(i-1) 这里用到i的值,并且操作是一样的,都是i-1。
是不是可以写成
for(int i=1;i<=resus.size();i++){--------------------编程问答--------------------
item.setMoney1(cashBudgetService.getMoney(c.getDailyFeeProject().getId(), c.getDailyCatalog().getId(),resus.get(i-1),companyId));
}
支持这个
不过我又想问,如果真的有setMoney30()或setMoney31()的话,写出这种代码的不应该直接开除么? --------------------编程问答--------------------
我也是这么觉得滴
补充:Java , Java SE