java - 自动装箱和泛型

标签 java

我其实对这两个话题都很困惑,谁能解释一下。

ArrayList<Long> queryParms = new ArrayList<Long>();
  1. 上面的是泛型还是自动装箱,什么是拆箱?
  2. 这是最佳做法吗?
  3. 有人说自动装箱是件坏事。
  4. 如果我使用泛型,我可以避免自动装箱和拆箱吗?

最佳答案

  1. 以上是泛型的例子。自动装箱是编译器自动转换包装器类型中的基本类型,反之亦然。例如,在您的情况下,来自 Long 变量中的 long 变量:

    long param = 13L;
    queryParms.add(param);
    
  2. 使用泛型?是的。它允许您指定列表将包含的内容。你应该使用它们。使用自动装箱?是的,它简化了代码,您不必担心原始变量类型与包装器之间的转换(反之亦然)。

  3. 自动装箱并不邪恶(恕我直言)。它们是一些极端情况,其中自动装箱可能非常烦人,但如果你知道它是如何工作的,你就不必担心它。这是 the Sun (now Oracle) paper on auto-boxing ,如果您需要了解更多信息。

  4. 如果您想创建一个包含包装器的列表(在您的例子中,Long),您将不得不处理类型转换。您可以使用显式类型转换,也可以使用自动装箱。

关于java - 自动装箱和泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3802681/

相关文章:

java - Raspberry Pi 无法在 JavaFX 应用程序中隐藏鼠标光标

java - 不同 tomcat worker 的 Log4j

java - 我应该如何创建这个新页面? JSP 还是 servlet?

java - 使用 PDFBox 2.0.2 缺少类 PDFTextStripper() 从 PDF 中提取文本

java - 升级到Java库的最新版本后,Stripe PaymentSource不会扩展

java - 在 Couchbase Java SDK 中使用 toBlocking() 的正确方法是什么?

java - 无法在 php osx 中执行 ("java -version")

java - 根据另一个表中选定的输出更新另一个表中的行,但程序仅更新顶部一行

java - 加密 application.yml 中的 RSA 公钥

java - 将 Mockito 与 Java11 一起使用时出现异常