相关疑难解决方法(0)

什么是Java中的"SAM类型"?

阅读Java-8规范,我不断看到对"SAM类型"的引用.我无法找到明确解释这是什么.

什么是SAM类型以及什么是何时可以使用的示例场景?

java lambda java-8

116
推荐指数
1
解决办法
3万
查看次数

为什么使用invokedynamic调用Java 8 lambdas?

invokedynamic指令用于帮助VM在运行时确定方法引用,而不是在编译时对其进行硬连线.

这对于动态语言很有用,其中确切的方法和参数类型在运行时才知道.但Java lambda不是这种情况.它们被转换为具有明确定义的参数的静态方法.并且可以使用此方法调用此方法invokestatic.

那么invokedynamiclambda 的需求是什么,尤其是在性能受到影响的情况下?

java lambda jvm bytecode java-8

64
推荐指数
3
解决办法
1万
查看次数

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
            }
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

首先定义一个类:

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) {/* …
Run Code Online (Sandbox Code Playgroud)

java performance anonymous-class execution-time

27
推荐指数
5
解决办法
1万
查看次数