lambda 序列化_Lambda,会序列化吗?
生活随笔
收集整理的這篇文章主要介紹了
lambda 序列化_Lambda,会序列化吗?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
lambda 序列化
因此,我一直在思考Tyrus項目所需的增強功能,該功能允許用戶廣播到跨機器集群連接到URL的客戶端子集。 有多種方法可以做到這一點。 但是自從我使用JDK 8以來,這個問題肯定看起來像釘子。
為此,我創建了一個簡單的單元測試類,該類將使用過濾器,將其序列化到磁盤,讀回然后執行。 它有一個實例字段“ VALUE”,我們可以使用它直接或間接引用以找出導致序列化失敗的原因。
因此,為了進行校準,請確保匿名內部類將失敗,因為它始終包含對封閉對象的引用……。
@Test(expected = NotSerializableException.class)public void testAnonymousDirect() throws IOException, ClassNotFoundException {String value = VALUE;filter(new SerializablePredicate<String>() {@Overridepublic boolean test(String t) {return value.length() > t.length();}}, "Bob");}本地類也是如此,您不使用本地類嗎?
@Test(expected = NotSerializableException.class)public void testLocalClass() throws IOException, ClassNotFoundException {class LocalPredicate implements SerializablePredicate<String> {@Overridepublic boolean test(String t) {// TODO Implement this methodreturn false;}}filter(new LocalPredicate(), "Bobby");}因此,當然可以使用獨立的類,在這種情況下,為方便起見,可以使用嵌套類。
public static class LengthPredicate implements SerializablePredicate<String> {private String value;public LengthPredicate(String value) {super();this.value = value;}public void setValue(String value) {this.value = value;}public String getValue() {return value;}@Overridepublic boolean test(String t) {// TODO Implement this methodreturn false;}}@Testpublic void testStaticInnerClass() throws IOException, ClassNotFoundException {filter(new LengthPredicate(VALUE), "Bobby");}因此,讓我們開始使用JDK 8,事實證明,我的第一次嘗試也失敗了,但是它確實確認序列化對于使用Lambda非常滿意。
@Test(expected = NotSerializableException.class)public void testLambdaDirect() throws IOException, ClassNotFoundException {filter((String s) -> VALUE.length() > s.length(), "Bobby");}稍作修改即可將值復制到有效的最終屬性中,現在可以lambda進行序列化并正確檢索。
@Testpublic void testLambdaInDirect() throws IOException, ClassNotFoundException {String value = VALUE;filter((String s) -> value.length() > s.length(), "Bobby");}當然,如果該值是一個簡單的方法參數,它也可以正常工作。
@Testpublic void testLambdaParameter() throws IOException, ClassNotFoundException {invokeWithParameter(VALUE);}private void invokeWithParameter(String value) throws java.lang.ClassNotFoundException, java.io.IOException {filter((String s) -> value.length() > s.length(), "Bobby");} 因此答案是肯定的,如果您稍加小心,就可以將其序列化。
翻譯自: https://www.javacodegeeks.com/2013/12/lambda-will-it-serialize.html
lambda 序列化
總結
以上是生活随笔為你收集整理的lambda 序列化_Lambda,会序列化吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓美少女万华镜(安卓美少女)
- 下一篇: Linux查看程序(查看linux的程序