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";
20篇读书笔记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", "t"); 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"); 112021清明节
手机太卡怎么解决
} 12
13
14
对于本地类来说同样如此,本地类有什么不可以使用呢? 1
2
@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 fal; 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 tValue(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 fal; 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