1.为什么用static。
经常看到有人说“内部类”和“静态内部类”,其实这种说法不准确。“静态内部类”的正确说法是“静态嵌套类“或者”嵌套类“,ViewHolder用的就是嵌套类。内部类是所在类的一部分,可以彼此互相访问实体。而嵌套类的最大特征是相对独立,不能访问所在类的方法和实体,占用资源更少,所以这里用嵌套类。当然如果你想去掉static用内部类的话也可以,只是会略微多浪费一些资源。
2.为什么不用set和get。
set和get是传统OOP中的一个很好的编码习惯,主要就是为了encapsulation。但是这里为什么不用,因为java不像其他编程语言比如C++能够做到inline来节省调用函数的开销。楼上有人说这个开销可以忽略不计,但是想想如果有一个简单的循环,每次都要访问一个成员变量并赋值,利用get或者set造成的调用开销甚至大于函数执行本身,这种情况的函数执行效率就非常低。在JVM中这种情况更甚,因为JVM中在编译阶段如果不用ProGuard就没有inline(执行阶段有没有不知道,可能会有适当的额优化),而且虚拟函数的调用开销更大。所以Android推荐在class的外部接口中遵循set和get原则,但是如果在内部,一律用直接访问成员变量的方式,所以这个不是楼上有人说的习惯,而是Android要求的。