为什么安卓更喜欢静态类
2022-09-01 02:47:47
我看到很多java代码,android更喜欢让开发人员使用静态内部类。特别是对于自定义 ListAdapters 中的 ViewHolder Pattern 等模式。
我不确定静态和非静态类之间的区别是什么。我已经读过它,但是在考虑性能或内存占用时似乎没有意义。
我看到很多java代码,android更喜欢让开发人员使用静态内部类。特别是对于自定义 ListAdapters 中的 ViewHolder Pattern 等模式。
我不确定静态和非静态类之间的区别是什么。我已经读过它,但是在考虑性能或内存占用时似乎没有意义。
这不仅仅是安卓开发者...
非静态内部类始终保留对封闭对象的隐式引用。如果您不需要该引用,它所做的就是消耗内存。请考虑以下情况:
class Outer {
class NonStaticInner {}
static class StaticInner {}
public List<Object> foo(){
return Arrays.asList(
new NonStaticInner(),
new StaticInner());
}
}
当你编译它时,你得到的将是这样的:
class Outer {
Outer(){}
public List<Object> foo(){
return Arrays.asList(
new Outer$NonStaticInner(this),
new StaticInner());
}
}
class Outer$NonStaticInner {
private final Outer this$0;
Outer$NonStaticInner(Outer enclosing) { this$0 = enclosing; }
}
class Outer$StaticInner {
Outer$StaticInner(){}
}
静态和非静态内部类之间的主要区别在于,非静态内部类可以访问外部类的其他成员,即使它们是私有的。非静态内部类是外部类的“一部分”。如果没有外部类的实例,则无法创建它们,也不能存在它们。这样做的结果是,当外部类的实例被销毁时,非静态内部类的实例将被销毁。
另一方面,静态内部类与普通的外部类一样。他们自己生死。不需要外部类的实例即可使内部类存在。这意味着他们也有自己的生命周期。当垃圾收集器决定销毁它们时,它们会被摧毁。
这对内存和/或性能有何影响?我真的不知道。:)