当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《非瞬态类成员上的JavaPMD警告》经验,为你挑选了3个好方法。

在线:

private boolean someFlag;

我收到以下PMD警告:

发现非瞬态,非静态成员.请标记为瞬态或提供访问者.

有人可以解释为什么这个警告在那里,它意味着什么?(我明白如何解决它,我不明白为什么它在那里......)

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


编辑:我的类绝对不是一个bean,而不是可序列化的......



1> tcurdt..:

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

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


好吧,我明白了,但是这个班不是一个豆...... PMD在我的背上做了无关的假设:)

2> Andreas Pete..:

好的,现在我明白了.添加定义后

private boolean someFlag;

很清楚这里发生了什么:

此错误消息确实引用了访问模式.PMD声明bean引用的类也必须遵循bean模式.

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

PMD它期望有一个isSomeFlag()/ getSomeFlag()和setSomeFlag()方法,您可以通过它来访问它的值,而不是直接访问它.

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



3> toolkit..:

请参阅此处发生的规则

BeanMembersShouldSerialize

如果一个类是bean,或者由bean直接或间接引用它,则需要可序列化.成员变量需要在类中标记为transient,static或者具有访问器方法.将变量标记为瞬态是最安全和最简单的修改.访问器方法应遵循Java命名约定,即如果您有变量foo,则应提供getFoo和setFoo方法.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有