java中没有getter的瞬态变量[关闭]
Posted
技术标签:
【中文标题】java中没有getter的瞬态变量[关闭]【英文标题】:Transient variables without getters in java [closed] 【发布时间】:2020-07-06 17:02:52 【问题描述】:如果我在基类(实现可序列化)和扩展它的子类中有瞬态变量,我知道子类也会自动序列化,但基对象中是否仍需要 getter。我使我的 vars 瞬态并删除了 getter 并得到了 PropertyNotFoundException,所以我想我正在回答我自己的问题。只是想知道是否有另一种方法不必在基础中包含吸气剂。
【问题讨论】:
不清楚你想要达到的目标 只是想拥有类似私有瞬态字符串 myName;并且没有吸气剂。我假设如果一个字段是瞬态的,它不会被序列化并使用它的原始默认值,但它看起来也需要 getter。 绝对不需要Getter。这是什么 PropertyNotFoundException? 你说的是transient
关键字(docs.oracle.com/javase/specs/jls/se7/html/…)还是java beansTransient
注解(docs.oracle.com/javase/7/docs/api/java/beans/Transient.html)?
Getter 与通过 Serializable
接口标记问题的 Java 序列化没有任何关系。 PropertyNotFoundException
也没有。不清楚你在问什么。
【参考方案1】:
您将许多独立的问题混为一谈:
一般来说,如果一个字段被声明为transient
,则不需要为它声明一个getter和setter。
一般来说,如果您要使用依赖于 JavaBeans 约定的各种框架(即 Spring DI、JPA/Hibernate、JSP(等)EL 表达式语言、JAXRS 等)那么您确实需要实现 getter 和(如果需要)setter。
如果您正在使用需要 getter 或 setter 的持久性机制,那么它们是必需的。但是标准的 Java 对象序列化机制不需要这个。 (它根本不使用 getter 和 setter。)
一般来说,您不需要 getter 和 setter 只是因为涉及到继承。
您还没有说是什么抛出了PropertyNotFoundException
,甚至没有给出它的完整类名,所以我们无法告诉您是否有任何不涉及添加getter 和setter 的替代方法。但是,添加 getter 和 setter 可能是最简单且最面向对象的解决方案。有关说明,请参阅“Why use getters and setters/accessors?”。
请注意,如果您卡住了,并且无法修改声明这些字段的父类,那么您可以尝试在子类中添加 getter 和 setter。它可能会起作用……取决于框架的实现方式。
【讨论】:
我很抱歉。我太着急了,没有提供足够的细节。仅供参考,异常来自我在更改 JSP 时错过的字段上的 BeanResolver。再次,我道歉,以后不会急于做这些事情。以上是关于java中没有getter的瞬态变量[关闭]的主要内容,如果未能解决你的问题,请参考以下文章