我其实对这两个话题都很困惑,谁能解释一下。
ArrayList<Long> queryParms = new ArrayList<Long>();
- 上面的是泛型还是自动装箱,什么是拆箱?
- 这是最佳做法吗?
- 有人说自动装箱是件坏事。
- 如果我使用泛型,我可以避免自动装箱和拆箱吗?
最佳答案
以上是泛型的例子。自动装箱是编译器自动转换包装器类型中的基本类型,反之亦然。例如,在您的情况下,来自
Long
变量中的long
变量:long param = 13L; queryParms.add(param);
使用泛型?是的。它允许您指定列表将包含的内容。你应该使用它们。使用自动装箱?是的,它简化了代码,您不必担心原始变量类型与包装器之间的转换(反之亦然)。
自动装箱并不邪恶(恕我直言)。它们是一些极端情况,其中自动装箱可能非常烦人,但如果你知道它是如何工作的,你就不必担心它。这是 the Sun (now Oracle) paper on auto-boxing ,如果您需要了解更多信息。
如果您想创建一个包含包装器的列表(在您的例子中,
Long
),您将不得不处理类型转换。您可以使用显式类型转换,也可以使用自动装箱。
关于java - 自动装箱和泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3802681/