Java 匿名类效率影响

这两种做事方式在效率(例如执行时间,代码大小等)上是否有任何差异?

以下是创建对象而不执行任何操作的人为示例,但我的实际方案可能是创建新的线程,侦听器等。假设以下代码片段在循环中发生,以便它可能会有所作为。

使用匿名对象:

void doSomething() {
    for (/* Assume some loop */) {
        final Object obj1, obj2; // some free variables

        IWorker anonymousWorker = new IWorker() {
            doWork() {
                // do things that refer to obj1 and obj2
            }
        };
    }
}

首先定义一个类:

void doSomething() {
    for (/* Assume some loop */) {
        Object obj1, obj2;
        IWorker worker = new Worker(obj1, obj2);
    }
}

static class Worker implements IWorker {
    private Object obj1, obj2;
    public CustomObject(Object obj1, Object obj2) {/* blah blah */}

    @Override
    public void doWork() {}
};

答案 1

匿名类和顶级类之间一的实际区别是,匿名类将包含对外部类的隐式引用。

这不会体现在性能上,但如果您序列化这些类,则会影响您。


答案 2

应该几乎没有任何性能差异。如果存在差异,它将处于不值得担心的水平。

IMO,您应该专注于编写可读且可维护的代码,并忽略“微”性能问题,直到您有明确证据表明它们很重要......基于对应用程序的分析。

(为了记录,当匿名内部类引用封闭作用域中的 a 时,这是通过隐藏的构造函数参数和隐藏的实例属性在字节码级别实现的。字节码将与您从其他实现中获得的字节码几乎相同。final


推荐