代码规范的提醒,备受煎熬的教训啊!

一名新入职的开发人员在测试部门轮岗期间接手了一个Android测试工具的开发任务,面对前任留下的代码,他发现了一系列令人啼笑皆非的设计方案,如过度使用静态变量、在自定义View的触摸事件中进行Activity跳转等。

今年刚毕业,进了一家还算可以的公司,目前在轮岗阶段,可能很多公司都有类似的制度吧,开发人员进测试部门轮岗,产品相关进运营部门轮岗,为期三个月。这三个月主要进行一些技能的规范,过渡期嘛,说白了就是让大家都知道,干活都不容易,对自己的工作负责能给后续人员节省很多不必要的麻烦,要互相理解。 于是,我们的故事开始了…….. (干货在最后)


我是一个开发,说来巧,就算在测试部门轮岗,刚好我的任务是一个Android测试工具的开发,不依赖PC,独立的一个测试app,于是要进入吐槽主题了!!!

这个项目前面已经有一个人在做了,是比我早入职一个月,也就是早轮岗一个月的一个人,我现在接收这个工作,她的,好吧,是个女生。。。她最先开始的这个工作,主要负责了整体的框架和其中一个模块的开发,我嘞个去,我就气不打一出来!

做过Android的同学都知道,一般都是用Java写的,面向对象自然不用说,作为一个开发人员,想必应该知道一个最简单的原则,就是 松耦合 这个概念。什么意思呢,就是你负责的模块应该对系统整体的影响性做到最低,再简单点,删去你的模块,不影响系统其它模块的运行!

要怎么才能做到松耦合呢,说句实话,我也是刚毕业,对这方面的理论知道的不多,但是随便怎么,自己想想也能知道,尽量使用局部变量,减少与外界的数据交互,必要的数据交互应该根据面向对象的思想去进行操作,谁的事交给谁去干。也许我说的不是很正确,但是这样做至少能避免很多问题。

你猜猜这个姐们怎么滴了!!还记得当初我们写C程序吗?需要用一个变量的时候,我们把滚动条拉到最上面main函数开始的地方进行定义,名字可能起成i,j,k等等,谁让是新手呢!嘿,就是好用,我在哪都能对这些变量进行操作。估计当出遇到Android时这姐们是傻眼了,Java都能忍,人家有main函数啊,我还可以像C一样写,这Android都是什么activity呀什么的,这边我想用那边的一个变量怎么办!?

问题是有的,但是你挡不住人家解决问题的心啊!!!!!于是她想到一个牛逼的方法!!! S!T!A!T!I!C! 尼玛啊!!!static啊!!!!,咦,不是static哪都能用么,我这边怎么访问不到?哦~~~**P!U!B!L!I!C!** 此时此刻,我的内心其实已经是崩溃边缘了,可能你会问,不就是用了些公有静态量么。。。至于么。。。? 我要大声的喊出来:很至于!!! 要知道,哪里都能操作公有静态量,所以,什么时候对它在什么地方赋值是很难寻找的,尤其是在一个比较大的工程里,大海捞针啊!拿起来就能用,这里操作完那里继续用,感觉已经把代码玩弄于股长之中。

什么?我刚说了什么?什么时候在什么地方用。。。。这个什么时候真是玩死我了,这个姐们用了多线程操作。。。。恩!最简单的那种extends Thread,但是你在多线程里操作公有静态量是什么鬼!!!于是你真的不知道这个公有静态量会是什么值,这时我已对她肃然起敬了。。。。。

你以为故事完了? 并没有!!!

Android还有一个比较特殊的地方,大家肯定也知道,主线程不做耗时操作,子线程不更新UI,晤~ 这可让我们这个出神入化的姐们如何是好!

前方核能!!!

这是我之前从来没有试过的高科技,大篇幅得用Android广播机制更新UI。。。请收下我的膝盖和这口老血!!只要想更新UI,我不用handler,我也不用asy异步任务,runonUIthread是什么,我只认broadcast!,这个就牛逼了,简直千里传音啊!!注册一个广播,在子线程里发送广播,此时的逻辑….不必多言

今天还出了一档子事。。。。对于一个简单的ListView跳转,我死活没找到跳转逻辑在哪,读者可能说了,你傻啊,setonitemClick什么的啊,恩~没有这个注册,大不了在adapter里啊,恩~没在adapter里。。。。请收下我的项上人头!!我最后找到了,在诸多代码中找到了!这个姐姐写了一个自定义View,作为ListView单个Item的布局,在这个自定义View中,恩~并不是setonclick中写的!!!在touchevent中。。。。一个看似不起眼的onKeyUp!!!!里面写了一个像重要activity的跳转!!!就三行!!!!恩???什么?重要activity才三行,难道不需要给传递一些必要的数据吗???本来是需要的,但是!!!但是!!!但是!!!!我有静态全局变量啊,我只传递了一个下标,其他的,让那个activity用下标自己在公有静态量里去找吧!

这时,我的内心,好一群羊驼啊。

哦~多么痛的领悟~


我还是讲几句干活吧,总不能总吐槽。
静态量这个东西,不是系统架构级的编码,一定慎重使用啊!!就我知道的,就算是系统级的api,也不会把静态量设为public,一把情况我们编码static前都要跟一个final,静态常量。

尤其在Android中!这种错误的使用很容易导致静态量对无用对象的长期持有,导致内存泄露,或者,静态量被回收,恩?静态量怎么会被回收?确实会,一旦被回收,在你潇洒的使用时一不小心就Nullpionter了。

对于更新UI, 同学们呐!千万不要千里传音!我不知道是谁传的音,老老实实使用handler吧,异步任务也是很ok的,虽然道理都是handler。。。。

不说了,今天才周一,明天还要去给这姐们的代码烧香呢!

### 回答1: Java枚举是一种特殊的类,它使用固定的值来创建一组常量,这些常量可以用来控制程序的流程或者增加可读性。例如,下面的代码演示了使用Java枚举创建一个用于表示星期的枚举类:public enum WeekDay { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }你可以使用WeekDay枚举来检查一个给定的日期是否是工作日:if (WeekDay.MONDAY.equals(date) || WeekDay.FRIDAY.equals(date) || WeekDay.SATURDAY.equals(date)) { System.out.println("It's a work day"); } else { System.out.println("It's a weekend"); } ### 回答2: Java枚举是一种特殊的类类型,它限制了对象的创建,并且只允许使用预定义的一组常量作为枚举类型的取值范围。枚举可以用于定义一组相关的常量,提高代码的可读性和可维护性。 Java的枚举类型是通过使用关键字`enum`来定义的。以下是一个例子: ```java public enum DayOfWeek { MONDAY, // 星期一 TUESDAY, // 星期二 WEDNESDAY, // 星期三 THURSDAY, // 星期四 FRIDAY, // 星期五 SATURDAY, // 星期六 SUNDAY // 星期日 } ``` 在上面的例子中,我们定义了一个枚举类型`DayOfWeek`,它包含了一周的每天(星期一到星期日)作为常量。这些常量都是`DayOfWeek`的实例,并且使用大写字母命名。 枚举常量的访问方式是通过枚举类型名和常量名进行访问。例如,要访问`DayOfWeek`枚举中的`MONDAY`常量,可以使用`DayOfWeek.MONDAY`。 除了常量外,枚举还可以有构造函数、方法和字段。下面是一个带有字段和方法的枚举类型的例子: ```java public enum Season { SPRING("春天", 1), SUMMER("夏天", 2), AUTUMN("秋天", 3), WINTER("冬天", 4); private String name; private int index; private Season(String name, int index) { this.name = name; this.index = index; } public String getName() { return name; } public int getIndex() { return index; } } ``` 在上面的例子中,`Season`枚举类型有一个构造函数,它接受一个字符串和一个整数作为参数,并将它们赋值给枚举的`name`和`index`字段。此外,`Season`枚举还有两个公共方法`getName()`和`getIndex()`,用于获取枚举实例的名称和索引。 通过使用枚举,我们可以简化代码和逻辑,并提高代码的可读性和可维护性。例如,在判断当前季节时,可以使用`Season`枚举来代替繁琐的判断语句。 ### 回答3: Java枚举(Enumeration)是一种特殊的数据类型,它用于定义一组预定义的常量。相比于使用常量或者整数来表示不同的选项,使用枚举可以使代码更加清晰、可读性更好。在Java中,枚举是通过关键字"enum"来定义的。 枚举类型可以包含多个枚举值,每个枚举值都是该类型的一个实例,相互之间是唯一的。每个枚举值都可以有自己的属性和方法。枚举类型还可以实现接口,继承类或者实现自己的方法。 下面是一个简单的例子来说明Java枚举的使用: ``` enum Weekday { MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六"), SUNDAY("星期日"); private String chineseName; Weekday(String name) { this.chineseName = name; } public String getChineseName() { return chineseName; } } public class EnumExample { public static void main(String[] args) { Weekday today = Weekday.MONDAY; System.out.println("今天是" + today.getChineseName()); } } ``` 在上面的例子中,我们定义了一个枚举类型`Weekday`,包含了一周的每一天。每个枚举值都有一个中文名称,构造函数用于设置中文名,`getChineseName()`方法用于获取中文名。 在`main()`方法中,我们创建了一个`today`变量,将其赋值为`Weekday.MONDAY`,然后通过`today.getChineseName()`方法获取了今天的中文名。 总结来说,枚举类型是为了对一组常量进行整合和管理,使代码更加可读性高,并且具有更好的类型安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值