我有一个类,其中所有的内部类都是这样的
public class BaseClass{
.......
......
.......
public class AccountPaymentDetailBean implements Serializable {
//inner class
}
}
但我得到的是异常
java.io.NotSerializableException:com.core.shi.core.folder.BaseClass $ 5 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180) 在 java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528) 在 java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 在 java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528) 在 java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 在 java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) 在org.zkoss.zk.ui.AbstractPage.writeObject(AbstractPage.java:232) 在sun.reflect.GeneratedMethodAccessor124.invoke(未知来源)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:601)at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:975) 在 java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 在 java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) 在java.util.LinkedList.writeObject(LinkedList.java:1118)at sun.reflect.GeneratedMethodAccessor25.invoke(未知来源)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:601)at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:975) 在 java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 在 java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528) 在 java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:438) 在 org.zkoss.zk.ui.impl.DesktopImpl.writeObject(DesktopImpl.java:1044) 在sun.reflect.GeneratedMethodAccessor118.invoke(未知来源)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:601)at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:975) 在 java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 在 java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528) 在 java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 在 java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) 在java.util.HashMap.writeObject(HashMap.java:1100)at sun.reflect.GeneratedMethodAccessor24.invoke(未知来源)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:601)at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:975) 在 java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 在 java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528) 在 java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:438) 在org.zkoss.util.CacheMap.writeObject(CacheMap.java:633)at sun.reflect.GeneratedMethodAccessor112.invoke(未知来源)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:601)at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:975) 在 java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 在 java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528) 在 java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 在 java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) 在 org.zkoss.zk.ui.http.SimpleSession.writeThis(SimpleSession.java:433) 在 org.zkoss.zk.ui.http.SerializableSession.writeObject(SerializableSession.java:71) 在sun.reflect.GeneratedMethodAccessor111.invoke(未知来源)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:601)at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:975) 在 java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 在 java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) 在 com.csdcsystems.amanda.servlet.AmandaSessionFilter.sizeof(AmandaSessionFilter.java:88) 在 com.csdcsystems.amanda.servlet.AmandaSessionFilter.testSerializability(AmandaSessionFilter.java:73) 在 com.csdcsystems.amanda.servlet.AmandaSessionFilter.doFilter(AmandaSessionFilter.java:55) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) 在 org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:607) 在 org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:316) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615) 在 org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61) 在java.lang.Thread.run(Thread.java:722)
有人可以告诉我 BaseClass $ 5 的含义是什么?这个例外的确切含义是什么?
答案 0 :(得分:1)
Q2)这个例外到底是什么意思?
内部类不应该实现Serializable。它们使用编译器生成的合成字段来存储对封闭实例的引用,并存储来自封闭范围的局部变量的值。
内部类的默认序列化形式是未定义的。但是,静态成员类可以实现Serializable。
更多信息here.
Q1)有人可以告诉我BaseClass $ 5的含义是什么吗?
没有更多细节。 BAseClass $ 5表示这个例外发生在这个类中。
答案 1 :(得分:1)
有人可以告诉我BaseClass $ 5的含义是什么吗?
BaseClass中定义的第五个匿名内部类。
为匿名内部类分配一个等于封闭类型的自动名称,加上一个美元符号和一个序数。在您的示例中:“BaseClass”+“$”+“5”。
这个例外的确切含义是什么?
com.csdcsystems.amanda.servlet.AmandaSessionFilter.testSerializability
)org.zkoss.zk.ui.http.SerializableSession
)似乎内部定义了匿名BaseClass$5
。答案 2 :(得分:0)
Q1)有人可以告诉我BaseClass $ 5的含义是什么吗? 有时候,内部类没有名字。 在你的情况下它有一个名字。 我们直接创建一个类(例如接口的实现者)并给出实现,并用:)完成它的情况;然后 该类没有名称。 那么JVM如何为那个???创建一个.class文件呢? - 答案是$命名约定。 所以这些类被创建为BaseClass $ 1,BaseClass $ 2 ......等等。
必须至少有5个这样的内部非名字类 - 检查你的课程 - 哪一个获得哪个数字? - > 我认为纯粹依赖于序列。 例如 - clickListener纯粹是虚构的,例如我试图展示......
public class myclass{
public void mymethod(){
this.addClickListener(new ClickListener(){
public void click(){
S.O.P("Clicked !!!");
}
});
}
}
因此实现CLickListener被编译为 - > MyClass的$ 1.class