Java 匿名类效率影响

标签 java performance anonymous-class execution-time

这两种做事方式的效率(例如执行时间、代码大小等)有什么不同吗?

以下是创建对象但什么都不做的人为示例,但我的实际场景可能是创建新线程、监听器等。假设以下代码片段发生在循环中,这样可能会有所作为。

使用匿名对象:

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() {}
};

最佳答案

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

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

关于Java 匿名类效率影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3028341/

相关文章:

C++ 等价于 Java 的匿名类

c++ - 如何将模板类限制为仅具有类型别名的特定专业

java - 我们如何调用java匿名类中重写的方法?

performance - 与Compass和Watch一起 Grunt 咕slow的编译速度很慢

java - 降低静态方法的可见性

java - 用于 FTP 操作的标准 Java 类

java - 根据当前文本压缩修订历史记录

java - 无法在 RejectionHandler 中获取 CallableThread

c++ - 考虑到缓存一致性的高性能应用程序的POD数学结构类的C++选择按值传递还是按引用传递

mysql - 如何使用许多 JOIN 提高查询性能