繁体   English   中英

在Java中动态重命名对象?

[英]Dynamically rename objects in java?

我正在使用jsf / primefaces开发一个Web应用程序。 在我的应用程序中,我将大量多边形推到gmap叠加层上。 但是,当我将多边形推到叠加层上时,它会合并为一个大多边形,因为对象名称在“多边形”多边形处是静态的。 我的问题是如何在迭代中重命名多边形并将多边形对象的名称从多边形更改为polygon1,polygon2,polygon3等。这是我尝试将多边形推入叠加层的代码片段。

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 ..依此类推”。

更干净的方法是在循环外创建一个数组列表,在循环内创建一个新的“多边形”,然后继续将多边形推入数组列表中。 优点是您以后可以使用此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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM