开发了将近一年的项目,不停的重复着做一些重复的事。其中有很多是在更新迭代以及再开发的过程中,不断得以改进的地方。对于这些频繁又基础的操作,如果还没有接触的赶紧来试试吧!
.class
Collections.emptyList();
当从一个函数当中获取一个数组且我们并不希望返回数组为 null 的情况下,可使用 Collections.emptyList() 来代替 new ArrayList() 或者 new LinkedList(),既可省去对返回数组对象的 null 判断,亦可省去不必要的内存开销。String[] strs = {"a","b","c"};
List strList = Arrays.asList(strs);// String[]转ArrayList
String[] strs2 = strLs.toArray(new String[strLs.size()]);// ArrayList反转String[]
strList.replaceAll(",","");// 输出"abc"
Collections.swap(strList, 0, 2);// 输出"cba"
拒绝繁琐的工作方式,让便捷成为一种辅助你偷懒的工具。
TextUtils.isEmpty(string);
可以通过 string.equals(null) 判断 string 是否为 null ,但更多时候也需要判断 string 的长度是否为0,即 string.equals("") ,但如果 string 为 null 会导致判断时出现 NullPointerException 异常。固然 TextUtils.isEmpty(string) 才是两全齐美的选择。
private static String sExact = "123";
if(sExact.equals(str));// 判断 str 的值是否等同于设定的值 "123"
或许有些人较为习惯 if(str.equals(sExact)); 这种写法,但是你可能不经意忘记 str 它自身存在 null 的情况,所以为了避免其造成 NullPointerException 异常,需要加多个判断 if(null != str && str.equals(sExact)); 。
然而实际上可直接用 if(sExact.equals(str)); 的来代替 if(null != str && str.equals(sExact)); 。前提是已经确认 sExact 为预设常量,并不存在 null 的情况。
ArrayList mList = ...;
if(null != mList && mList.isEmpty()){};
与 TextUtils.isEmpty() 同理,对于数组内容大小是否为0,引用 isEmpty() 便可直接代替 mList.size() == 0 这一判断。
private final static int ADULT_AGE = 18;
String type = year >= ADULT_AGE ? "young man" : "childer";
可以一行代码解决的判断,就不要依赖 if else 了,更何况这种写法效率更高。
private final static int ADULT_AGE = 18;
public void toXXOO(){
if(year < ADULT_AGE ){
Toast.makeText(context, "Minors are not allowed in!", Toast.LENGTH_SHORT).show();
return;
}
... // do anything
}
这里代码上并没有什么特别之处,只是我们通过 return 省去了 else 编辑以及之后代码的执行,让代码不至于往右方向缩进。当然并非所有环境下都能适用,若判定顺序以及内容比较复杂的情况,仍建议用回 else ,恢复提高代码的可读性。
for(int i = 0, k = list.length(); i < k; i ++);
是不是感到有些许蒙逼了呢? 骚年,其实际上只是帮你上去了一行代码而已,切莫惊慌。
for(Object object : objectList);
继JDK 5.0之后 for 循环的增强版,简化编程。建议使用(除了集合以及需要索引的场景以外)。
.xml
<TextView
tools:text="预览效果"
android:visibility="gone"
tools:visibility="visible"/>
.../>
根布局记得引入 xmlns:tools="http://schemas.android.com/tools"。简单点说吧, tools 可实现任意属性并实现“预览效果”,但实际代码运行这些属性的设置是不会出现的。
viewStub.inflate();viewStub.setVisibility(View.VISIBLE);
布局的延迟加载,占用资源小。执行 inflate() 时 viewStub 所指向的布局仍然会被实例化,也就是说其依然会占用相应的内存资源。建议使用但实际上并不常用,注意 inflate() 只能执行一次。
@dimen/font_main@color/blackcenter
单个布局以及跨布局出现重复视图样式的情况,建议在 style.xml 当中自定义通用的样式属性,一方面方便布局文件的浏览,减少了代码的编辑量,另一方面还有利于项目的后期维护。
other
- 尽可能的避免创建全局变量,能局部就局部(打比方 listView.getAdapter(); 既然这里能获取就可以尽量避免 new 一个 Adapter 在全局上,当然如果局部调用较为频繁那就给放全局吧);
- 布局设计尽可能不要过多的嵌套(除非真的没辙,一定要这么做);
- 无论是代码实现还是 UI 设计,为了创建美好幸福将来,能脱离复用就脱离复用;-接手别人项目的能参考就参考,不能参考得改的就该批量改,不要局部改。