我正在尝试在Java中实现Factory模式。我有一个名为Shape的类,该类由Circle和Triangle扩展。问题在于Shape构造函数仅获取2个参数,而Circle则获取3个参数,Triangle也是如此(由于与Circle相同,因此我不会在代码部分中显示)。为了更好地演示它:
private interface ShapeFactory{
public Shape create(int x, int y);
}
private class CircleFactory implements ShapeFactory{
public Shape create(float radius, int x, int y){ //error
return new Circle(radius, x,y);
}
}
任何想法如何克服这个问题?我一定不能从工厂内部接收用户的输入(必须从外部接收)。
谢谢!
您有两种选择:
1)抽象工厂:
RectangularShape extends Shape
RoundShape extends Shape
并RectangularShapeFactory
与RoundShapeFactory
2)构建器(另请参见有效Java中的第2项)
public Shape {
private final int x;
private final int y;
private final double radius;
private Shape(Builder builder) {
x = builder.x;
y = builder.y;
radius = builder.radius;
}
public static class Builder {
private final int x;
private final int y;
private double radius;
public Builder(int x, int y) {
this.x = x;
this.y = y;
}
public Builder radius(double radius) {
this.radius = radius;
return this;
}
public Shape build() {
return new Shape(this);
}
}
}
//in client code
Shape rectangle = new Shape.Builder(x,y).build();
Shape circle = new Shape.Builder(x,y).radius(radiusValue).build();
我在创建对象和参数化构造函数时遇到以下错误。 Main.java: 6:错误:构造函数Cipher类中的Cipher不能应用于给定类型 必需:无参数 找到:int 原因:实际参数列表和正式参数列表的长度不同 这是我的文件的样子
问题内容: 我有这个类的构造函数: 问题是,我想创建此类的数组,如何对其进行初始化? 不起作用。 更新 我需要做这样的事情吗? 然后初始化每个对象? 问题答案: 在创建数组时,您正在创建类别数组。那是数组的一个实例。 当用Category对象填充数组时,此时将使用带有Const的Category。
我有以下课程布局: 我正在为服务创建一个单元测试,但我想将ServiceHelper用作一个“活动”类,但要模拟ServiceHelper中的构造函数参数。有没有办法通过Mockito实现这一点?
对于我的Java应用程序,我尝试使用ScalaCheck编写一些基于属性的单元测试。为此,我需要生成器,但我能找到的所有教程都使用带有参数的构造函数来生成对象。我需要生成的对象没有构造函数参数,我无法添加这样的构造函数,因为它来自外部库。 我现在有以下内容(Jwt声明来自软件包组织.jose4j.jwt): 关于如何编写我的生成器,有什么建议吗?我对Scala一无所知,所以如果我犯了一个“明显”的
在Dart中,工厂构造函数需要编码器提供更多逻辑,但与常量构造函数没有太大区别,只是它们允许“非最终”实例变量。 与const Constructor相比,它们有哪些优点? 谢谢大家。 编辑 下面是关于Seth Ladd博客“Dart-试图理解“工厂”构造函数的价值”中工厂构造函数的用法。 恕我直言,使用通用构造函数,可以通过细微的差异实现相同的效果,但相当简单。 如上所示,尽管这两个实例 所以,
当Java中给出参数构造函数时,为什么默认的无参数构造函数会失败? 这个设计有什么意义? 例如: