【问题标题】:What is ":" doing in this beginners java example program using generics?在这个使用泛型的初学者 java 示例程序中,“:”在做什么?
【发布时间】:2011-08-27 16:59:44
【问题描述】:

好的,所以我需要帮助来理解一些事情。我了解“?:”是如何一起使用的,但是阅读了一些 Java 开头的内容后,我发现这种情况在一些地方突然出现。最近是这个……

public static <U> void fillBoxes(U u, List<Box<U>> boxes) {
    for (Box<U> box : boxes) {
        box.add(u);
    }
}

我很困惑的是“:”到底在做什么。任何帮助,将不胜感激。我正在 Oracle 网站的一个页面上查看此示例,位于此处:http://download.oracle.com/javase/tutorial/java/generics/genmethods.html

【问题讨论】:

    标签: java loops foreach


    【解决方案1】:

    这就是 Java 的 for-each 循环结构。它与泛型本身无关,或者:不是专门用于泛型。简写为:for every type box in the collection named boxes do the following...

    这是link to the official documentation

    更简单的代码示例:(而不是管理泛型来执行 int 数组的求和)

    int[] intArray = {1,5,9,3,5};
    int sum = 0;
    for (int i : intArray) sum += i;
    System.out.println(sum);
    

    输出:23

    【讨论】:

    • +1。只是想补充一点,当我自己阅读代码时,我喜欢将“:”读为“in”(正如您在回答中所做的那样)。
    • @Ian:我实际上是要抛出一个显示 in 关键字的 C# 示例......虽然不会混淆答案,但最好放在这里。 C#版本:foreach (int i in collection_of_ints) { /*do stuff*/ }
    • 一个小提示:这个答案的措辞意味着只有Box&lt;U&gt; 类型的对象将被迭代;实际上它将迭代集合中的所有对象并将每个对象隐式转换为Box&lt;U&gt;。如果一直使用泛型,则集合中的所有元素实际上都是Box&lt;U&gt; 类型。我之所以提到这一点,是因为新手可以将其解释为意味着 Box&lt;U&gt; 类型的元素是从 Objects 的集合中选择出来的。
    【解决方案2】:

    这是for 循环的“foreach”形式。它是获取集合上的迭代器并遍历整个集合的语法糖。

    这是编写类似以下内容的捷径:

    for (Iterator<Box<U>> it = boxes.iterator(); it.hasNext(); ) {
        Box<U> box = it.next();
        box.add(u);
    }
    

    有关更多信息,请参阅 this Oracle page,其中专门讨论了“foreach”循环。

    【讨论】:

      【解决方案3】:

      它用于迭代容器,在本例中是一个列表。它为boxes 变量中的每个对象执行一次循环。

      【讨论】:

        【解决方案4】:

        这是 Java 1.5 中添加的增强型 for-each 循环,可有效地遍历集合元素。

        Java 文档指南本身提供了更详细的解释。http://download.oracle.com/javase/1.5.0/docs/guide/language/foreach.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多