【发布时间】:2017-06-02 17:58:35
【问题描述】:
在我们的 Web 应用程序项目中,我们使用 Redis 来管理会话。为了支持它,我们正在序列化将存储在会话中的任何对象。
例如,我们使用 DTO 来保存用于在屏幕上显示的 bean 数据。即使 DTO 内部有任何其他对象(组合),我们也必须对其进行序列化,否则我们会得到 NotSerializableException。
我在创建匿名内部类以实现Comparator 时遇到问题,如下所示:
Collections.sort(people, new Comparator<Person>() {
public int compare(Person p1, Person p2) {
return p1.getLastName().compareTo(p2.getLastName());
}
});
上面的代码抛出了NotSerializableException,我通过创建一个实现Comparator 和Serializable 接口的类来解决它。问题是,它被扔在了使用此 DTO 的 JSP 页面中。我不得不进行大量调试才能找到实际问题。
但现在,我想将上面的代码更改为使用 Lambda 表达式,如下所示:
Collections.sort(people, (p1, p2) -> p1.getLastName().compareTo(p2.getLastName()));
但是,我担心可能会发生同样的异常。 Lambda 表达式是否在内部创建对象?
【问题讨论】:
-
this 是什么意思?例如。
Comparator c = (Comparator & Serializable) (p1, p2) -> p1.getLastName().compareTo(p2.getLastName()) -
对不起,我不太了解 Lambda,但是上面的代码是否意味着它会创建一个在内部实现
Comparator和Serializable接口的对象? -
是的,我想是的,但到目前为止我还没有测试过。我是古玩,所以我会检查自己。
标签: java serialization lambda redis