Java8:Lambda序列化

Java8:Lambda序列化
Java8:Lambda序列化
最近我一直在考虑为Tyrus项目做一个优化处理,允许用户跨越集向连接到一个URL的一部分客户端进行广播。有很多方法可以达成目标。但自从使用了JDK 8 后,这个问题简已经变成了我的眼中钉。
为了达到这个目的,我创建了一个简单的单元测试。通过过滤器将它序列化到磁盘上、读取然后执行。我们可以直接或间接地引用它的一个实例字段“VALUE”,以此来查出究竟是什么导致了序列化失败
import java.io.File; 1 import java.io.FileInputStream;
import java.io.FileOutputStream; 2
import java.io.IOException; 3 import
java.io.NotSerializableException;
import java.io.ObjectInput; 4
import java.io.ObjectInputStream; 5 import java.io.ObjectOutput;
6 import java.io.ObjectOutputStream;
import java.io.Serializable; 7
8 import java.util.function.Predicate;
9 import org.junit.Test;
10
public class SerializablePredicateFilterTest { 11
12 public String VALUE = "Bob";
13
public interface SerializablePredicate<T> extends Predicate<T>, Serializable {} 14
public <T> void filter(SerializablePredicate<T> sp, T value) throws IOException, ClassNotFoundException 15
{
Class().isLocalClass();
File tempFile = ateTempFile("labmda", "set"); 17
18 try (ObjectOutput oo = new ObjectOutputStream(new FileOutputStream(tempFile))) {
oo.writeObject(sp); 19
}
20
try (ObjectInput oi = new ObjectInputStream(new
FileInputStream(tempFile))) { 21
SerializablePredicate<T> p = (SerializablePredicate<T>)
System.out.st(value)); 23
} 24 }
} 25
26
27
28
29
30
31
32
33
34
35托玛琳活水杯
36
既然只是为了校对,我们可以让匿名内部类测试失败,因为它总是包含了一个
宿主类的对象
的引用……
1
2
@Test(expected = NotSerializableException.class)
3 public void testAnonymousDirect() throwsIOException, ClassNotFoundException
{ 4
5 String value = VALUE;
6
filter(newSerializablePredicate<String>() { 7
@Override 8
public boolean test(String t) { 9 return value.length() > t.length();
} 10
}, "Bob"); 11
} 12
13
14
对于本地类来说同样如此,本地类有什么不可以使用呢? 1
2
分布式kvm
@Test(expected = NotSerializableException.class) 3 public void testLocalClass() throws IOException, ClassNotFoundException  { 4
5 class LocalPredicate implements SerializablePredicate<String> {
@Override 6
public boolean test(String t) { 7 // TODO Implement this method  return false; 8
} 9 }
10
亨润成型机炮筒公司
filter(new LocalPredicate(), "Bobby"); 11
} 12
熏香炉13
14
一个独立的类当然可以工作,在这个示例中为了方便起见使用了一个嵌套类。
public static class LengthPredicate implements
SerializablePredicate<String> 1 {
2
private String value; 3
4 public LengthPredicate(String value) {
super(); 5 this.value = value;
6 }
7
public void setValue(String value) { 8 this.value = value;
} 9
10 public String getValue() {
return value; 11
卡环弯制
}
12
@Override 13
public boolean test(String t) { 14 // TODO Implement this method  return false; 15
} 16 }
17
@Test 18 public void testStaticInnerClass() throws IOException, ClassNotFoundException
聚四氟乙烯滑动支座
19 {
20 filter(new LengthPredicate(VALUE), "Bobby"); 21
} 22
23
24
25
26
27
28
29

本文发布于:2024-09-21 01:39:21,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/101010.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:序列化   失败   目的   用户   目标   导致   方法   广播
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议