动态重命名 java 中的对象?
Dynamically rename objects in java?
我正在使用 jsf/primefaces 开发 Web 应用程序。在我的应用程序中,我将大量多边形推到 gmap 覆盖层上。但是,当我将多边形推到叠加层上时,它会合并为一个大多边形,因为对象名称在 Polygon 多边形处是静态的。我的问题是如何在迭代时重命名多边形并将多边形对象名称从多边形更改为多边形 1、多边形 2、多边形 3,etc.Here 是我的代码片段,我试图将多边形推到叠加层上。
Polygon polygon = new Polygon();
while (rs.next()) {
HashMap<Integer, Polygon> map;
map = new HashMap<Integer, Polygon>();
int id = rs.getInt(1);
String value = rs.getString(2);
String valuereal = value.replaceAll("[^0-9 .,-]+", "");
ArrayList<String> myList = new ArrayList<String>(Arrays.asList(valuereal.split(",")));
myList.remove(myList.size() - 1);
for (String coordString : myList) {
String[] parts = coordString.split(" ");
String latS = parts[0];
String lngS = parts[1];
double lat = Double.parseDouble(latS);
double lng = Double.parseDouble(lngS);
LatLng coord = new LatLng(lat, lng);
polygon.getPaths().add(coord);
map.put(id, polygon);
}
polygon.setStrokeColor("#000000");
polygon.setFillColor("#009900");
polygon.setStrokeOpacity(2.0);
polygon.setFillOpacity(3.0);
System.out.println(map.get(id).getPaths());
polygonModel.addOverlay((Polygon) map.get(id));
您的问题是您在循环外实例化了 polygon
对象。要将它们分开,您不需要创建 'polygon1, plygon2 .. and so on'。
更简洁的方法是在循环外创建一个数组列表,在循环内创建一个新的 'polygon' 并继续将多边形推入数组列表。优点是你可以稍后使用这个 ArrayList 来迭代并对多边形做任何事情
ArrayList <Polygon> polygons = new ArrayList<Polygon>();
while (rs.next()) {
Polygon polygon = new Polygon();
.
.
.
.
for(....){
polygon.getPaths().add(coord);
polygons.add(polygon)
}
// now add all polygons to map
for (Polygon p : polygons) {
map.put(id, p);
}
} // end of while
以上只是一个片段,但应该能让您了解我的意思。请原谅任何语法错误,我已经有一段时间没说 Java 了。
这会给你添加到地图的单独的多边形对象,但是我不太确定你将它添加到地图对象的'id'。这似乎是商业逻辑。但是你明白了。最多,您可能必须添加具有新 ID 的每个多边形,这会将 map.put
循环推到 while
之外
看起来您正在重复更新同一个 polygon
对象,因为它是在 while 循环之外实例化的。尝试在 while 循环中更新它,例如
Polygon polygon = new Polygon();
while (rs.next()) {
HashMap<Integer, Polygon> map;
变成...
while (rs.next()) {
Polygon polygon = new Polygon();
HashMap<Integer, Polygon> map;
我正在使用 jsf/primefaces 开发 Web 应用程序。在我的应用程序中,我将大量多边形推到 gmap 覆盖层上。但是,当我将多边形推到叠加层上时,它会合并为一个大多边形,因为对象名称在 Polygon 多边形处是静态的。我的问题是如何在迭代时重命名多边形并将多边形对象名称从多边形更改为多边形 1、多边形 2、多边形 3,etc.Here 是我的代码片段,我试图将多边形推到叠加层上。
Polygon polygon = new Polygon();
while (rs.next()) {
HashMap<Integer, Polygon> map;
map = new HashMap<Integer, Polygon>();
int id = rs.getInt(1);
String value = rs.getString(2);
String valuereal = value.replaceAll("[^0-9 .,-]+", "");
ArrayList<String> myList = new ArrayList<String>(Arrays.asList(valuereal.split(",")));
myList.remove(myList.size() - 1);
for (String coordString : myList) {
String[] parts = coordString.split(" ");
String latS = parts[0];
String lngS = parts[1];
double lat = Double.parseDouble(latS);
double lng = Double.parseDouble(lngS);
LatLng coord = new LatLng(lat, lng);
polygon.getPaths().add(coord);
map.put(id, polygon);
}
polygon.setStrokeColor("#000000");
polygon.setFillColor("#009900");
polygon.setStrokeOpacity(2.0);
polygon.setFillOpacity(3.0);
System.out.println(map.get(id).getPaths());
polygonModel.addOverlay((Polygon) map.get(id));
您的问题是您在循环外实例化了 polygon
对象。要将它们分开,您不需要创建 'polygon1, plygon2 .. and so on'。
更简洁的方法是在循环外创建一个数组列表,在循环内创建一个新的 'polygon' 并继续将多边形推入数组列表。优点是你可以稍后使用这个 ArrayList 来迭代并对多边形做任何事情
ArrayList <Polygon> polygons = new ArrayList<Polygon>();
while (rs.next()) {
Polygon polygon = new Polygon();
.
.
.
.
for(....){
polygon.getPaths().add(coord);
polygons.add(polygon)
}
// now add all polygons to map
for (Polygon p : polygons) {
map.put(id, p);
}
} // end of while
以上只是一个片段,但应该能让您了解我的意思。请原谅任何语法错误,我已经有一段时间没说 Java 了。
这会给你添加到地图的单独的多边形对象,但是我不太确定你将它添加到地图对象的'id'。这似乎是商业逻辑。但是你明白了。最多,您可能必须添加具有新 ID 的每个多边形,这会将 map.put
循环推到 while
看起来您正在重复更新同一个 polygon
对象,因为它是在 while 循环之外实例化的。尝试在 while 循环中更新它,例如
Polygon polygon = new Polygon();
while (rs.next()) {
HashMap<Integer, Polygon> map;
变成...
while (rs.next()) {
Polygon polygon = new Polygon();
HashMap<Integer, Polygon> map;