[ 
https://issues.apache.org/jira/browse/LANG-980?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18136008#comment-18136008
 ] 

Jonothan Li commented on LANG-980:
----------------------------------

I've opened a pull request for this issue: 
[https://github.com/apache/commons-lang/pull/XXXX 
|https://github.com/apache/commons-lang/pull/1853]

It changes the two == comparisons in DurationFormatUtils.Token 
(containsTokenWithValue and Token.equals) to use equals(), and adds 
testLANG980, which fails before the change and passes after.

> DurationFormatUtils uses == for comparing objects
> -------------------------------------------------
>
>                 Key: LANG-980
>                 URL: https://issues.apache.org/jira/browse/LANG-980
>             Project: Commons Lang
>          Issue Type: Bug
>          Components: lang.time.*
>            Reporter: Sebb
>            Priority: Minor
>             Fix For: Patch Needed
>
>
> As reported on the ML, Findbugs complains that == is being used to compare 
> objects in the class DurationFormatUtils.
> These objects are the strings which define the various durations: "y", "M", 
> "d" etc.  These are final static objects (singletons) so the use of == should 
> be OK but it is not good practice.
> One way to avoid the warnings would be to use an Enum for the singleton 
> objects. For example:
> {code}
> enum Duration { YEAR, MONTH, ... }
>     static final ParseObject y = ParseObject.YEAR;
>     static final ParseObject M = ParseObject.MONTH;
> ...
> {code}
> Note: the package protected fields y, M etc are currently needed for the unit 
> tests.
> The above change would then allow the format() method to use a switch 
> statement which would likely be faster than the if chain it has to use now.
> Eliminating the warnings for == which are currently safe would make it 
> obvious if == was used elsewhere in an unsafe way.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to