草庐IT

可变序列

全部标签

java - 使 "class"成为 transient 或可序列化但该类是可序列化的

在检查我的代码后,SonarQube5.1标记了很多关键问题。但是类本身和字段中的引用类也是可序列化的。被引用类通过类继承可序列化接口(interface)。这是我的例子publicclassAimplementsSerializable{privateBb;//->Sonarcubemarkesthisfieldasnotserialzable}B类定义如下publicclassBextendsC{....}C类定义如下publicabstractclassCextendsD{....}定义了类DpublicabstractclassDimplementsSerializable{.

java - Gson:序列化 java.nio.Path 导致 StackOverflowError

序列化它,导致StackOverFlowError:importjava.nio.file.Path;importjava.nio.file.Paths;publicclassTmp{privatePathpath=null;publicTmp(){path=Paths.get("c:\\temp\\");}}在我看来这像是一个错误!或者我做错了什么?是否有解决方法(期望编写一些将路径转换为字符串的自定义序列化程序)java.lang.StackOverflowErroratcom.google.gson.internal.$Gson$Types.resolve($Gson$Types

java - 包装到另一个类中的不可变整数(按值调用)

我想知道在Java中按值调用并尝试了一些代码。publicclassTest{publicstaticvoidmain(String[]args){Testtest=newTest();Integerinteger=4;System.out.println(integer);test.change(integer);System.out.println(integer);}publicvoidchange(Integerinteger){integer++;}}因为java是按值调用的,所以我在徘徊输出:45但是打印出来了44然后我了解到整数是不可变的,所以我的方法“更改”创建了值为5

java - 可变对象的安全发布

我阅读了几个相关问题,但没有一个解释安全发布持有人的方式。我仍然对Java并发实践中的示例感到困惑,第3.5节:有类Holder:publicHolder{privateintn;publicHolder(intn){this.n=n};publicvoidassertSanity(){if(n!=n)thrownewAssertionError("Thisstatementisfalse.");}}及其不安全的出版物://unsafepublicationpublicHolderholder;publicvoidinitialize(){holder=newHolder(42);}可

java - 静态初始化的 unmodifiableCollection.get 是否保证不可变?

静态初始化的unmodifiableCollection.get是否保证不可变?对于:静态最终mapFOO=Collections.unmodifiableMap(newHashMap());多线程使用get方法能不出问题吗?即使无法添加/删除FOO中的项目,是什么阻止了get方法出于缓存目的操纵FOO的内部状态等。如果以任何方式修改内部状态,则FOO不能同时使用。如果是这样,java中真正的不可变集合在哪里? 最佳答案 给出具体的例子:staticfinalMapFOO=Collections.unmodifiableMap(ne

java - Logback MDC put() 可变对象

我正在使用Vaadin框架,它对拦截事件的支持很差,我无法知道session或UI何时被激活,所以我无法将它们的ID放入MDC。通常我会:publicvoidonSessionBegin(){MDC.put("session",VaadinSession.getCurrent().toString());//但是我没有这样的事件,所以我想://intheservletinitorwhereverMDC.put("session",newObject(){publicStringtoString(){VaadinSession.getCurrent().toString()};});//

java - 等价于 Java 中的 C++ 可变参数模板

我想用Java编写一个泛型类型安全的观察器。在C++中,我可以使用C++11中的可变参数模板轻松完成此操作,如下所示:classObserver{voidupdate(T...args);};现在,在java中,我能做的最好的事情是:classObserver{voidupdate(Targs);};现在,update不能像C++那样接受多个不同类型的参数。有人可以建议解决这个问题吗?提前致谢。 最佳答案 如果所有参数都扩展/实现T你可以说:classObserver{voidupdate(Listargs){}}

java - 将代理类序列化到文件

我有一个在JVM运行时生成的代理(生成为JDKProxy或CGLIB代理)。我想知道是否有办法将此类(看起来像com.sun.proxy$Proxy123.class)的内容写入文件,以便我可以使用类似jd-eclipse的反编译器来查看代码类型产生。由于该类存在于JVM中,我想知道是否有一种方法可以要求ClassLoader为实际类提供InputStream/URL,然后可用于将内容写入磁盘-以及磁盘上的这个文件可以使用jd-eclipse或javap读取。我知道这不是生产用例,但我很想看看这个动态生成的类的内容。谢谢! 最佳答案

java - 如何将 scala.collection.Set 转换为 java.util.Set 并在 RDD 中进行序列化

我有一个scala.collection.SetscalaSet:Set[Long]。我如何才能将其转换为可序列化的java.util.Set。我尝试了以下代码,但得到了java.io.notserializableexception:scala.collection.convert.wrappers$setWrapperimportscala.collection.JavaConversions._ClassMySerializableClassextendsSerializable{//methodtoimplementtheScalatoJavaoperationsonthegi

java - 不可变链表的拆分器

这是不可变链表的经典实现:publicabstractclassListimplementsIterable{privatestaticfinalListNIL=newNil();publicabstractAhead();publicabstractListtail();publicListcons(Aa){returnnewCons(a,this);}publicstaticListnil(){returnNIL;}@OverridepublicIteratoriterator(){returnnewIterator(){privateListlist=List.this;@Ove