commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Luc Maisonobe (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (MATH-942) DiscreteDistribution.sample(int) may throw an exception if first element of singletons of sub-class type
Date Sat, 09 Mar 2013 15:43:12 GMT

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

Luc Maisonobe commented on MATH-942:
------------------------------------

We have encountered the same kind of issue with Field implementations. For this reason, we
have added the method:

{code}
Class<? extends FieldElement<T>> getRuntimeClass();
{code}

in the interface, so appropriate objects can be created (this is what is used in the buildArray
method in MathArrays). However, we cannot do the same here because we want to allow any class
in the distribution, not only implementations of one of our interfaces.

Passing the runtime class as an argument to the distribution would work, but seems also cumbersome.

I am a bit reluctant to use Object[] as your patch, though. Are you sure it would always work?
I know type erasure occurs, but with your patch, we mainly apply it ourselves. Is it safe?
                
> DiscreteDistribution.sample(int) may throw an exception if first element of singletons
of sub-class type
> --------------------------------------------------------------------------------------------------------
>
>                 Key: MATH-942
>                 URL: https://issues.apache.org/jira/browse/MATH-942
>             Project: Commons Math
>          Issue Type: Bug
>            Reporter: Piotr Wydrych
>         Attachments: DiscreteDistribution.java.patch
>
>
> Creating an array with {{Array.newInstance(singletons.get(0).getClass(), sampleSize)}}
in DiscreteDistribution.sample(int) is risky. An exception will be thrown if:
> * {{singleons.get(0)}} is of type T1, an sub-class of T, and
> * {{DiscreteDistribution.sample()}} returns an object which is of type T, but not of
type T1.
> To reproduce:
> {code}
> List<Pair<Object,Double>> list = new ArrayList<Pair<Object, Double>>();
> list.add(new Pair<Object, Double>(new Object() {}, new Double(0)));
> list.add(new Pair<Object, Double>(new Object() {}, new Double(1)));
> new DiscreteDistribution<Object>(list).sample(1);
> {code}
> Attaching a patch.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message