非瞬态类成员上的 Java PMD 警告

2022-09-01 06:16:09

在线:

private boolean someFlag;

我收到以下 PMD 警告:

找到非瞬态、非静态成员。请标记为瞬态或提供访问器。

有人可以解释为什么会有这个警告以及它意味着什么吗?(我知道如何修复它,我不明白为什么它在那里...)

我也在许多其他成员声明中得到这个...


编辑:我的类绝对不是豆子,也不是可序列化的...


答案 1

我假设你的类是一个bean,根据定义实现。将从序列化过程中排除瞬态变量。如果序列化然后反序列化 Bean,则该值实际上将具有默认值。Serializable

PMD 假设您在此处处理的是可序列化的 Bean。对于 Bean,它应该具有所有成员变量的 getters/setter。由于您省略了这些,因此您暗示您的成员变量不是bean的一部分....因此不需要序列化。如果是这种情况,则应将其从序列化中排除。通过将变量标记为“瞬态”来执行此操作。


答案 2

现在我明白了。

添加此定义后:

private boolean someFlag;

...很明显,这里发生了什么:

此错误消息确实引用了访问架构。PMD 指出,bean 引用的类也必须遵循 Bean 模式。

最有可能支持属性样式访问的将转换为MyBean.referredClass.someFlagsomeObject.getReferredClass().getSomeFlag()

PMD 它期望有一个和方法,您可以通过该方法访问其值,而不是直接访问它。isSomeFlag/getSomeFlagsetSomeFlag

Found non-transient, non-static member. Please mark as transient **or provide accessors**.