coding基础代码注意点

本文探讨了编程中常见的几个误区和注意事项:1)在for循环外初始化List中的对象会导致值被覆盖;2)静态方法中必须使用new对象调用非静态成员,否则会报错;3)对List排序时,不正确地使用Collections.sort可能导致排序逆转,需明确排序规则;4)使用SimpleDateFormat解析日期时,格式不匹配会导致Unparseable date异常。理解这些细节有助于提升代码质量。

1.List里面new对象

List<OapOrderAppt> listAppt = new ArrayList<>();
if (listUpdateAppt.size() > 0) {
	for (ApptQueryResultDto resultAppt : listUpdateAppt) {
		OapOrderAppt updateDomain = new OapOrderAppt();
		updateDomain.setId(resultAppt.getApptId());
		listAppt.add(updateDomain );
    }
}

--- OapOrderAppt updateDomain = new OapOrderAppt();在for循环外面定义,后一个值会把前一个值覆盖掉。是因为每次循环对这个对象的引用进行操作。对象的引用只有一个,所以每次后一个把前一个覆盖掉了。

2.static的用法

写代码的时候遇到一个问题。从facade层注入@Autowired的service。直接用类名调用service的方法,报错,提示将service改成static的。就很奇怪,之前从controller直接调用service都没有问题,怎么就从这个facade调用有问题。找了下原因,发现是facade层里面写了一个静态方法:


---总结static修饰的方法里面,必须new对象调用,类名调用的必须是static修饰

3.对于List集合的排序

public static List<PadPaymentDate> sortReturn(List<PadPaymentDate> returnCommissions){
	Collections.sort(returnCommissions, new Comparator<PadPaymentDate>() {  
        @Override  
        public int compare(PadPaymentDate o1, PadPaymentDate o2) {  
            long i = o1.getPaymentTime().getTime() - o2.getPaymentTime().getTime();  
            return (int)i;  
        }
    });  
	return returnCommissions;
}

当使用Collections的这种排序方式的时候,排序规则直接返回了o1-o2。

错误:当传进来的集合是由大到小排序的时候,我这种排序可以实现由小到大的规则。但是当传进来的集合本身是由小到大排序的时候,我这种方式就会将原本正确的由小到大,排序成由大到小。

解析:Collections的sort方法默认是升序排列,如果需要降序排列时就需要重写conpare方法。

解决:①排序规则重新定义【加上判断返回--》if(i>0){return i}】

②使用jdk8的新特性

public static List<PadPaymentIncomeDate> sortIncome(List<PadPaymentIncomeDate> ratiosDates){
	Collections.sort(ratiosDates,
			Comparator.comparing(PadPaymentIncomeDate::getPaymentTime));
	return ratiosDates;
}

4.使用SimpleDateFormat报 Unparseable date: "20180315"

public static void main(String[] args){
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
    String t1 = "20180315";
    try {
        Date t2 = sdf.parse(t1);
        String t3 = sdf.format(t2);
        System.out.println("t3="+t3);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
是因为【yyyy年MM月dd日】是这种格式,但是t1不是这种格式的。坑爹的simpleDateFormat要求
输入的字符串要和你想要的格式长度必须都一样。。。本来是要将【20180909】这种格式转变成【2018年09月09号】,饶了一圈不说还不可行。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值