Hi.

While making the distribution classes immutable, I'm encountering a problem.
In class "SimpleRegression" (package "stat.regression"), there is (at line
140):
---CUT---
        if (n > 2) {
            distribution.setDegreesOfFreedom(n - 2);
        }
---CUT---
and, similarly, in class "TTestImpl" (package "stat.inference"), there is
(at line 961):
---CUT---
        distribution.setDegreesOfFreedom(n - 1);
---CUT---

The method "setDegreesOfFreedom" does not exist anymore (it was depreceated
in 2.1).
I would have created a new instance e.g. for the first example above:
---CUT---
        if (n > 2) {
            distribution = new TDistributionImpl(n - 2);
        }
---CUT---
but the problem is the existence of a setter for the "distribution" instance
variable:
---CUT---
    public void setDistribution(TDistribution value) {
        distribution = value;

        // modify degrees of freedom
        if (n > 2) {
            distribution.setDegreesOfFreedom(n - 2);
        }
    }
---CUt---
So that, with the proposed change, the "distribution" variable will contain
a new reference (and even possibly an instance of another type).
Note that this setter is dangerous; it is the same problem as in issue 349:
  https://issues.apache.org/jira/browse/MATH-349
Hence I'd remove the setter entirely.

What do you think?


Gilles

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to