Creating a new ``++Random++`` object each time a random value is needed is inefficient and may produce numbers which are not random depending on the JDK. For better efficiency and randomness, create a single ``++Random++``, then store, and reuse it.
The ``++Random()++`` constructor tries to set the seed with a distinct value every time. However there is no guarantee that the seed will be random or even uniformly distributed. Some JDK will use the current time as seed, which makes the generated numbers not random at all.
\[~nicolas.peru] to what degree do we see/pay attention to "run once" annotations during analysis, e.g. @PostConstruct?
=== on 22 Oct 2014, 19:14:36 Nicolas Peru wrote:
At the moment : none.
So this rule won't detect that your random object is initialized in an init method.
It might makes more sense to actually detect Random local variables.
=== on 22 Oct 2014, 19:40:32 Ann Campbell wrote:
\[~nicolas.peru] you mean local ``++Random++`` variables, right? :-)
(I did actually have to read that twice & note the capital letter to understand your meaning :-) )
I'd say that as written, this rule is about local ``++Random++``s (did you assign it back to me because you don't agree?), but I was hoping to be able to make it smarter. Oh well.
=== on 15 Aug 2018, 18:28:35 Nicolas Harraudeau wrote:
This RSPEC is for now limited to detecting local variables of type ``++java.util.Random++``.
It could later cover cases where the Random object is not even assigned: