我试图在应用引擎中创建特定类型的请求时发送电子邮件 所以我使用TaskOptions.Builder.withUrl("path/to/httpServlet/class")
来启动servlet,但在servlet类中,我收到警告可序列化的类sendEmail不声明long类型的静态final serialVersionUID字段。那么是否有必要定义这个serialVersionUID?是否有必要在发送事件时由服务器发送电子邮件时使用HttpServlet中的serialVersionUID
回答
是否有必要取决于可序列化的类以及它将如何使用。
如果类的实例根本不会被序列化,那么它绝对没有区别。 serialVersionUID
仅在对象序列化和反序列化时使用。
的serialVersionUID
领域的效用时,代理商做的序列化和反序列化可能潜在使用不同版本的类或者可以在不同的Java平台上运行的出现。以下是Object Serialization Spec所说的内容:
流唯一标识符是类名称,接口类名称,方法和字段的64位散列。该值必须在除第一个类之外的所有类的版本中声明。它可以在原始类中声明,但不是必需的。该值对所有兼容类都是固定的。如果没有为类声明SUID,则该值默认为该类的哈希值。动态代理类的
serialVersionUID
和enum
类型的值始终为0L
。数组类不能声明明确的serialVersionUID
,因此它们始终具有默认的计算值,但对于数组类,可以免除匹配serialVersionUID
值的要求。注 - 强烈建议所有可序列化类中明确声明
serialVersionUID
值,因为默认serialVersionUID
计算是类的细节可能取决于编译器实现变化高度敏感,并因此可能导致反序列化过程中意外serialVersionUID
冲突,造成反序列化失败。
总结说:
如果你不声明
serialVersionUID
,你可以得到所造成的不属于真正的冲突无端例外。 (例如,如果你只是改变了方法名不改变类的代表性语义。)但是,如果你声明
serialVersionUID
,而你做的做了不兼容的变化的一类,那么你应该要更改serialVersionUID
的值......除非您要使用对象序列化提供的“即时”转换的其他机制之一。
注意SUIDs试图提供一个切实可行的解决方案到schema evolution problem。这是一个非常困难的问题。
1 - 从类型论的角度来看这听起来不太合理。违反类型抽象有许多方法。然而,SUID机制是非常实用的,并且鉴于Java编程语言的性质,对效率的需求等等,它是可能的。
- 1. 只发送电子邮件服务器
- 2. SQL服务器:发送电子邮件
- 3. Servicestack服务器发送事件 - 电子邮件应用程序
- 4. 无法使用PostFix邮件服务器发送电子邮件
- 5. 是否可以使用VS2010开发服务器发送电子邮件?
- 6. 发送电子邮件时是否需要打包长行?
- 7. 每1小时发送一次SQL服务器电子邮件
- 8. 使用SMTP服务器通过电子邮件发送附件
- 9. 选择电子邮件发送服务
- 10. 如何使用第三方电子邮件服务器发送电子邮件
- 11. 使用PHP在Windows服务器发送电子邮件
- 12. 在Windows服务器上使用Gmail发送电子邮件2008
- 13. 使用Node.js发送电子邮件时使用SMTP服务器的影响
- 14. 发送电子邮件时用电子邮件更改名称
- 15. 发送电子邮件使用的DNS服务器
- 16. 无法使用服务器上的SMTP发送电子邮件
- 17. 在CI中发送邮件时需要不必要的附件?
- 18. 登出时发送的电子邮件
- 19. 必须为vbscript发送电子邮件时发出STARTTLS错误
- 20. 测试发送电子邮件没有电子邮件服务器
- 21. PHP发送电子邮件多次发送电子邮件
- 22. 无法将邮件发送到电子邮件服务器
- 23. SMTP电子邮件未在一台服务器中发送,而是在另一台服务器中发送
- 24. 发送电子邮件消息后发送Web服务 - ServiceResponseException
- 25. 在Azure服务器上的SSIS包中发送电子邮件
- 26. 当使用TIdSmtp发送电子邮件时更改发件人
- 27. 无法在web服务中使用javamail发送电子邮件
- 28. 发送电子邮件,而不是从我的服务器
- 29. 发送电子邮件使用CodeIgnitor从托管服务器
- 30. 如何配置服务器使用cPanel发送电子邮件?
感谢您的回答 因为我可以从后我想我并不需要使用的serialVersionUID因为我不是交换类的对象去进行序列化和反序列化 – MRTC