我写了一个抽象的超类分布作为folows,它包含一个构造函数和两个方法。
public abstract class Distribution
{
public Distribution(){}
public abstract void setParameters(HashMap<String,?> hm);
public abstract int getSample();
}
此后,我写了4个子类(Poisson,Geometric,Deterministic和Binomial)。这些子类看起来都一样,就像这样;
public class Binomial extends Distribution
{
BinomialDistribution distribution;
public Binomial()
{
super();
}
@Override
public void setParameters(HashMap<String,?> hm)
{
try
{
int n = 0;
double p =0.0;
if (hm.containsKey("n"))
if (hm.containsKey("p"))
p = Double.parseDouble((String) hm.get("p"));
else
throw new Exception("Exception: No p-value found");
else
throw new Exception("Exception: No n-value found");
distribution = new BinomialDistribution(n,p);
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
@Override
public int getSample()
{
return distribution.sample();
}
}
在另一个课程中,我想使用这些课程。我想给Distribution.setparameters方法提供一个HashMap,让程序决定哪个子类适合该HashMap中给出的参数。
如果我想将A分布定义为另一个类,这似乎不起作用。
Distribution arrivalLength1distr = new Distribution();
有人可以告诉我我做错了什么以及如何解决我的问题?
谢谢!