我意识到Java可选Ojbect是不可序列化的。我还意识到,使用Optional object的主要目的是用于方法返回类型。
采用以下方法:
public Phone(){
public Optional<Phone> getPhone(){
// some logic goes here to create a new phone object and then put it in optional...
}
}
在客户端类中,它调用上述方法来检索可选对象,然后将其传递给请求,以便前端JSP页面可以使用此对象:
Optional<Phone> optionalPhone = (new Phone()).getPhone();
// 1. put Optional object in request/session.
request.setAttribute("optionalPhone ", optionalPhone );
// or 2. put Phone object in request/session.
request.setAttribute("phoneObject", optionalPhone.get());
问题:
>
我们应该将请求中的可选对象传递给前端JSP,还是传递可选对象(即Phone对象)的值?
至于前一个选项,可选是不可序列化的,所以它在分布式系统(会话复制等)中不起作用。如果我错了,请纠正我。
如果我将Phone对象而不是Optional对象传递给request,这是否意味着我需要使用Optional。get()方法?我听说在使用Optional时,我们应该避免使用isPresent()和get()方法。
对于#3,是否最好使用以下代码(以避免使用get()方法)?
//put Phone object in request/session.
request.setAttribute("phoneObject", optionalPhone.orElseGet(Phone::new));
>
如果需要设置可选属性,它有什么用?只是不要如果可选
见1。
事实并非如此。这种模式更倾向于大致如下:
getPhone()
.map(phone -> Request.withPhone(phone))
.orElse(Request.withoutPhone())
建议不要使用isPresent和get,因为这不是处理可选代码的惯用(声明性)方法。将其与我的(伪科迪什)建议进行比较。
我想做这样的东西: 这将不起作用,因为ifPresent将使用者函数接口作为参数,它具有void accept(t)。它不能返回任何值。还有别的办法吗?
我目前正在使用jdk-9 149测试将Java 8应用程序迁移到Java 9/Jigsaw。 该项目采用标准的Maven目录布局,即具有,,等等。 只要我添加到,maven编译器插件无法抛出NullPointerException。这是因为它也希望找到目录的模块信息。因此,据我所知,有以下几种选择: 将测试类保留在单独的模块中,这意味着它们只能访问主模块的导出包 显然,这两个选项似乎都不可取,所以
我试图模拟一个对象,该对象返回一个带有Mockito的Java可选对象: 当被调用,它返回。 我希望方法返回 返回的任何原因? 方法如下: 以下是Junit:
我们最近将消息处理应用程序从Java7升级到Java8。自升级以来,我们偶尔会发现一个异常,即在读取流时,流已被关闭。日志记录显示终结器线程正在对保存流的对象调用(这反过来会关闭流)。 守则的基本大纲如下: 和是自制的MIME/HTTP库的一部分。扩展,它具有以下特性: 异常发生在的调用链中,如下所示: 写入部件的标题,然后调用 调用我们的实用工具方法将内容流式传输到输出 只返回传入contstr
我有一个API,成功后返回以下响应: 或者在失败时像下面这样: 只有在请求成功时才会指定filename属性,但如果出现错误,则会提供消息。这意味着消息和文件名属性是“可选的”,但结果属性是必需的。 我尝试在定义中定义这个响应对象,如下所示: 但似乎swagger不喜欢“必需”属性,并将显示以下错误消息: 当我看一个来自swagger的例子时,他们有以下布局,其中有两个不同的响应定义,而不是一个。
我们有一个方法,其中我们收到一个