所以我遇到了一些看起来像这样的代码:
Polygon polygon = Polygon.Builder()
.addVertex(new Point(38.085255f, -122.734590f))
.addVertex(new Point(37.513400f, -122.726350f))
.addVertex(new Point(37.044617f, -122.413239f))
.addVertex(new Point(37.121307f, -121.765046f))
.addVertex(new Point(37.497051f, -121.707368f))
.addVertex(new Point(37.812351f, -121.905122f))
.addVertex(new Point(37.899094f, -121.740327f))
.addVertex(new Point(37.987900f, -121.877656f))
.addVertex(new Point(37.886089f, -122.034211f))
.addVertex(new Point(38.085247f, -122.366548f))
.build();
这只是将具有浮点坐标的点添加到数组中,然后在末尾构建多边形。无论如何,我的问题是,如果有任何简单的方法可以循环这个addVertex进程而不必更改进程的基本结构?
我尝试做的基本想法是:
for(int i = 0; i < vertices.length; i++) {
polygon.Builder.addVertex(new Point(vertices[i].getX(), vertices[i].getY());
}
polygon.Builder().build();
我试图尽可能地概括这个例子,希望我没有在这个过程中添加任何混淆。
答案 0 :(得分:3)
使用此方法链接构建器模式,关键是要识别每次调用addVertex
都会返回(新)构建器。要循环它,您可以在每次迭代时重复覆盖当前构建器。
PolygonBuilder builder = Polygon.Builder();
for (int i = 0; i < vertices.length; i++) {
builder = builder.addVertex(new Point(vertices[i].getX(), vertices[i].getY());
}
Polygon polygon = builder.build();
这适用于每个addVertex
调用是否返回新构建器,或者每次都返回相同的构建器。无论哪种方式。
答案 1 :(得分:0)
是。这应该工作。呼叫不必在同一条线路上进行。因此它可以循环工作。
System.out.println(new StringBuilder().append(1).append(2).append(3).toString());
与
相同StringBuilder sb = new StringBuilder();
sb.append(1);
sb.append(2);
sb.append(3);
System.out.println(sb.toString());
与
相同StringBuilder sb = new StringBuilder();
for(int i=1; i<=3; i++) {
sb.append(i);
}
System.out.println(sb.toString());