问题标签 [java-8]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
163 浏览

bundle - 发布 JRE 8 早期访问版本

我使用 jdk8 编译我的 java 程序以使用一些最新功能。

JRE 8 可以在最终发布之前发货吗?看起来 JRE 8 不能独立使用。所以我可以在 JDK8 最终发布之前发布它吗

0 投票
16 回答
297231 浏览

java - 如何在 Java 8 中定义一个将 lambda 作为参数的方法?

在 Java 8 中,方法可以创建为 Lambda 表达式,并且可以通过引用传递(在后台做一些工作)。网上有很多关于创建 lambda 并将其与方法一起使用的示例,但没有关于如何制作将 lambda 作为参数的方法的示例。它的语法是什么?

0 投票
1 回答
4393 浏览

java - Project Coin 的收藏增强功能会出现在 JDK8 中吗?

最初Project Coin增强了对集合的支持,例如list[3]代替list.get(3)map["hello"] = 27代替,map.put("hello", 27)但它们不在 jdk7 中。他们会在jdk8中吗?我找不到是或否的明确答案。

0 投票
1 回答
4928 浏览

java - Java 8 中的 Lambda 和泛型

我正在玩未来的 java 8 版本,也就是 JDK 1.8。

我发现你可以很容易地做到

并像使用它一样

它只打印 3。

而且我还发现有一个 java.util.function.Function 接口以更通用的方式执行此操作。但是这段代码不会编译

看来我首先必须做类似的事情

所以我想知道是否有另一种方法可以避免 IntIntFunction 步骤?

0 投票
2 回答
2727 浏览

java-7 - Java-7 中的签名多态方法

据我所知,随着 Java 7 中 MethodHandle 的引入,编译器生成的方法重载也随之引入。

MethodHandle的javadoc状态(我已经修剪了示例):

以下是一些使用示例:

上面的每个调用都会生成一个单独的 invokevirtual 指令,其名称为 invoke 和注释中指示的类型描述符。参数类型直接取自实际参数,而返回类型取自立即应用于调用的强制转换。这个演员表可能是一个原始人。如果缺少它,如果调用发生在使用返回值的上下文中,则类型默认为 Object。如果调用作为语句发生,则不可能进行强制转换,并且没有返回类型;通话无效。

实际上,invokeExact 和朋友的行为就好像参数和返回类型的每个可能组合都有一个重载。

我听说 MethodHandles 正在为 Java 8 中的功能做准备,比如 lambdas。(我知道它们对于脚本语言已经很有用了。)

[/介绍]

那么,Java 中是否还有更多这些编译器生成的重载?是否有暗示将来会有更多的它们(例如,使用扩展方法)?为什么首先需要它?仅仅是速度?它如何帮助 lambdas(我认为 lambdas 会编译为匿名内部类)?

简而言之,理由是什么?为什么它们(生成的重载)现在和将来有用?

更新:我在这里称之为编译器生成的重载,Oracle 人称之为签名多态

0 投票
9 回答
46919 浏览

java - Java 8:在 lambda 表达式中强制检查异常处理。为什么是强制性的,而不是可选的?

我正在使用 Java 8 中的新 lambda 功能,发现 Java 8 提供的实践非常有用。但是,我想知道是否有一种解决以下方案的好方法。假设您有一个对象池包装器,它需要某种工厂来填充对象池,例如(使用java.lang.functions.Factory):

将函数式接口转化为 lambda 表达式后,上面的代码变成了这样:

确实没那么糟糕,但是检查的异常java.sql.SQLException需要lambda 内的try/块。catch在我公司,我们长期使用两个接口:

  • IOut<T>相当于java.lang.functions.Factory;
  • 以及通常需要检查异常传播的情况的特殊接口:interface IUnsafeOut<T, E extends Throwable> { T out() throws E; }.

两者IOut<T>IUnsafeOut<T>都应该在迁移到 Java 8 期间被删除,但是没有完全匹配的IUnsafeOut<T, E>. 如果 lambda 表达式可以像未检查一样处理已检查的异常,则可以在上面的构造函数中像下面这样简单地使用:

这样看起来干净多了。我看到我可以重写ObjectPool超类来接受我们的IUnsafeOut<T>,但据我所知,Java 8 还没有完成,所以可能会有一些变化,比如:

  • 实现类似的东西IUnsafeOut<T, E>?(老实说,我认为这很脏 - 主题必须选择接受什么:要么Factory或不能具有兼容方法签名的“不安全工厂”)
  • 只是忽略 lambdas 中的检查异常,所以不需要IUnsafeOut<T, E>代理?(为什么不呢?例如另一个重要的变化:我使用的 OpenJDKjavac现在不需要将变量和参数声明为final在匿名类 [功能接口] 或 lambda 表达式中捕获)

所以问题通常是:有没有办法绕过 lambdas 中的已检查异常,还是在 Java 8 最终发布之前计划在将来?


更新 1

嗯,据我了解我们目前所拥有的,目前似乎没有办法,尽管引用的文章是 2010 年的:Brian Goetz 解释 Java 中的异常透明度。如果在 Java 8 中没有发生太大变化,这可以被视为一个答案。Brian 还说interface ExceptionalCallable<V, E extends Exception>(我提到IUnsafeOut<T, E extends Throwable>的代码遗留问题)几乎没有用,我同意他的观点。

我还想念别的东西吗?

0 投票
3 回答
13123 浏览

java - JetBrain IntelliJ IDEA 如何选择 Java 启动

我已经在我的 Window 7 上安装了 Java 8 EA,但它既不在我的%JAVA_HOME%也不在%PATH%. 但是,当我通过单击启动 IntelliJ IDEA v12 时idea64.exe,它选择了 java 8 EA 而不是我的 Java SDK 1.6.0_32,它位于%JAVA_HOME%and%PATH%中。

任何人都知道 IDEA 何时开始,它如何决定运行哪个 Java 版本?

0 投票
5 回答
71185 浏览

java - 在 java 8 中删除 JDBC ODBC 桥

从 Java 8 开始,JDBC-ODBC 桥将不再包含在 JDK 中。

有没有其他连接 JDBC-ODBC 桥的解决方案?

0 投票
5 回答
5205 浏览

java - Java8 的蛋糕模式可能吗?

我只是想知道:使用 Java 8,以及在接口中添加实现的可能性(有点像 Scala 特征),是否可以像在 Scala 中那样实现蛋糕模式

如果是,有人可以提供代码片段吗?

0 投票
4 回答
153540 浏览

java - 如何在 Java8 中为 void(非 Void)方法指定函数类型?

我正在使用 Java 8 来了解如何作为一等公民。我有以下片段:

我要做的是使用方法引用将方法传递displayInt给方法。myForEach编译器会产生以下错误:

编译器抱怨void cannot be converted to Void. 我不知道如何myForEach在代码编译的签名中指定函数接口的类型。我知道我可以简单地更改 to 的返回类型,displayInt然后Void返回null。但是,可能存在无法更改我想在其他地方传递的方法的情况。有没有一种简单的方法可以displayInt按原样重复使用?