autoboxing和泛型

Joh*_*ohn 6 java

我实际上对这两个主题感到困惑,任何人都可以解释我.

ArrayList<Long> queryParms = new ArrayList<Long>();
Run Code Online (Sandbox Code Playgroud)
  1. 以上是一个称为泛型或自动装箱以及什么是拆箱?
  2. 这是最佳做法吗?
  3. 有人说Autoboxing是邪恶的东西.
  4. 如果我使用泛型,我可以避免自动装箱和拆箱吗?

Viv*_*sse 8

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

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

  3. 自动拳击不是邪恶的(恕我直言).它们是一些极端情况,其中自动装箱可能非常烦人,但如果你知道它是如何工作的,你不必担心它.以下是关于自动装箱的Sun(现在的Oracle)论文,如果您需要了解更多信息.

  4. 如果要创建包含包装器的列表(在您的情况下Long),则必须处理类型转换.您可以使用显式类型转换,也可以使用自动装箱.

  • 无意中的自动(联合)拳击可能是一场表演,如果在多次执行的循环中完成.这可能是有些人认为它是邪恶的原因.然而,这里真正的问题是粗心编码(缺乏剖析),而不是语言特征本身. (4认同)