计划将产量包含在任何未来的Java版本中吗?

时间:2011-02-17 12:35:51

标签: c# java language-features yield

yield是我在Java编程时遇到的最好的C#功能之一。它有可能包含在Java 7或8中吗?

我知道有人试图模仿这个功能,我特别要求的是在官方java版本中将yield作为第一类关键字包含在内。

3 个答案:

答案 0 :(得分:1)

我认为Java应该首先支持闭包,yield将是它的扩展。 Java往往是一种简约语言,有许多方法可以做到这一点(虽然不是很优雅)

在给出的示例中,内联Power方法会更有意义。

static void Main(String... args) {
    // Display powers of 2 up to the exponent 8:
    for(int i = 1; i <= (1 << 8); i *= 2)
        System.out.println(i);
}

正如您所看到的,这要短得多,但可能不如它正在做什么那么清楚。

BTW:1为2 ^ 0且幂为2。

编辑:Java并不是一种丰富的语言,并且不鼓励不同的编程风格,因为它们没有给予他们良好的支持(结果看起来非常难看)但是可以这样做。

public static Iterable<Integer> power(int base, int exponent) {
    List<Integer> ints = new ArrayList<Integer>();
    for (int i = 1; exponent-- >= 0; i *= base) ints.add(i);
    return ints;
}

public static void main(String... args) {
    for (int i : power(2, 8)) System.out.print(i + " ");
}

打印

1 2 4 8 16 32 64 128 256 

答案 1 :(得分:0)

根据目前发布的Java 7和Java 8计划,答案是否定的。还有时间在Java 8中添加它,但我怀疑是否有人在使用此功能。在Java 9或更高版本中......谁知道。

如果您有项目的一部分可以从这样的功能中受益,您可以尝试使用Scala等替代JVM语言来完成项目的这一部分。我相信其中一些包括类似的功能。

答案 2 :(得分:-2)

我无处可见任何计划。绝对没有计划用于Java 7或8。

如果你专门谈论一个新的关键词被添加到语言中,那么发生的几率基本上是0.是的,它发生在之前(有断言等)但是必须有一个非常该死的令人信服的理由加一个!我怀疑这样的提案是否属于这一类别。

但是,老实说,我不会首先将它包含在Java中。我们已经拥有了迭代器接口,它非常整洁/足够好用,无需单独的功能。

如果您使用Java进行编码,那么Java方式就是您必须要做的事情!这一切都是为了适应不同的语言和编码到惯例。我一个人不希望看到Java变得更加混乱“只需添加它!!”请求 - 特别是在这方面,事情很好,并且通过添加这样的功能,获得的收益很少(IMO)。