相关疑难解决方法(0)

"编程到接口"的最佳实践是否适用于局部变量?

我被告知对局部变量的接口进行编程是没用的,不应该这样做,因为它只会伤害性能并且没有任何好处.

public void foo() {
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    // do list-y stuff with numbers
}
Run Code Online (Sandbox Code Playgroud)

代替

public void foo() {
    List<Integer> numbers = new ArrayList<Integer>();
    // do list-y stuff with numbers
}
Run Code Online (Sandbox Code Playgroud)

我觉得性能命中率可以忽略不计,但可以肯定的是,使用ArrayList的List语义并没有太大的收获.是否有充分理由采取这种或那种方式?

java generics collections interface

8
推荐指数
3
解决办法
2351
查看次数

为什么使用invokevirtual操作码调用Java中的最终方法

java中的final方法不能被继承的类覆盖。

但是,为什么使用invokevirtual而不是调用最终方法invokespecial

java

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

使用 Java var 关键字的缺点

一位演讲者刚刚提到更改为var是有用的语法糖(对齐变量名称)。我以为我会检查并发现...

    List<String> list = new ArrayList<>(); // IMO this is safer future-proof coding
    list.add("HELLO WORLD");
Run Code Online (Sandbox Code Playgroud)

... 使用invokeinterface调度生成字节码...

 11: invokeinterface #12,  2           // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
Run Code Online (Sandbox Code Playgroud)

转换为 Java 10+ var...

 11: invokeinterface #12,  2           // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
Run Code Online (Sandbox Code Playgroud)

... 使用invokevirtual调度生成字节码...

 11: invokevirtual #12                 // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
Run Code Online (Sandbox Code Playgroud)

例如,我是否应该关注批量升级整个应用程序的源代码var?例如,敏感部分会更慢(还是更快?!假设invokeinterface涉及更多步骤?)除此之外,是否还有其他非技术影响(例如,我看到了一个关于离线代码审查清晰度的有趣评论)

java jvm bytecode

0
推荐指数
1
解决办法
240
查看次数

标签 统计

java ×3

bytecode ×1

collections ×1

generics ×1

interface ×1

jvm ×1