匿名内部类与静态字段

时间:2013-12-25 08:11:48

标签: java static anonymous-inner-class

我更喜欢将static字段用于不在字段中存储其状态的类的实例,而不是匿名内部类。如果方法sort(或其他)经常调用,我认为这样可以减少内存和GC的使用。但我的同事更喜欢在这个案例中使用匿名内部类,说JIT会优化它。

class MyClass {
    //non fields of class

    /*access modifier*/ final static Comparator<MyClass> comparator = new Comparator<MyClass>(){
        public compare(MyClass o1, MyClass o2){
            //comparing logic
        }
    }
}

用法示例(我更喜欢):

List<MyClass> list = ...;
Collection.sort(list, MyClass.comparator);

用法示例(我的同事更喜欢):

List<MyClass> list = ...;
Collection.sort(list, new Comparator<MyClass>(){
    public compare(MyClass o1, MyClass o2){
        //comparing logic
    }
});

1。在openJDK优化中使用匿名内部类?
2。请告诉我这个案例的良好做法。

1 个答案:

答案 0 :(得分:2)

  

如果方法排序(或其他)经常调用,我认为这样可以减少内存和GC的使用。

嗯,反之亦然。如果你对内存感到困扰,static字段将存在于内存中,直到卸载类为止。

然而,关注的更多是这里的可读性而不是内存或性能。如果您发现自己使用Comparator实例可能是2-3次或更多,最好将其存储在字段中,以避免重复代码。更好的是,标记字段final。如果您只打算使用一次,则无法将其存储为static字段。

  

但是我的同事更倾向于使用匿名内部类来说明JIT会优化它。

我不明白你的同事在谈论什么样的优化。你应该让他/她进一步澄清。 IMO,这只是一个早熟的优化,你真的不应该被打扰。