[
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