【问题标题】:Dynamically rename objects in java?在java中动态重命名对象?
【发布时间】:2015-07-31 16:37:53
【问题描述】:

我正在使用 jsf/primefaces 开发一个 Web 应用程序。在我的应用程序中,我将许多多边形推送到 gmap 叠加层上。但是,当我将多边形推到覆盖层上时,它会合并成一个大多边形,因为对象名称在 Polygon 多边形上是静态的。我的问题是如何在迭代时重命名多边形并将多边形对象名称从多边形更改为多边形 1、多边形 2、多边形 3 等。这是我的代码的 sn-p,我试图将多边形推到覆盖层上。

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));

【问题讨论】:

    标签: java google-maps polygon


    【解决方案1】:

    您的问题是您在循环外实例化了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
    

    以上只是一个sn-p,但应该让你明白我的意思。请原谅任何语法错误,自从我讲任何 Java 以来已经有一段时间了。

    这将为您提供添加到地图的单独多边形对象,但是我不太确定您将其添加到地图对象的“id”。这似乎是业务逻辑。但是你明白了。在最大情况下,您可能必须添加具有新 ID 的每个多边形,这会将 map.put 循环推到 while 之外

    【讨论】:

      【解决方案2】:

      看起来您在重复更新相同的 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;
      

      【讨论】:

      • 这还不够。根据他的代码中的逻辑,他仍然会在地图上得到一个大多边形。它解决了参考问题,但不是手头的真正问题。请检查我的答案。
      • @Shaunak @pherris 实际上 pherris 代码确实有效,我确实认为这会导致问题,但它似乎有效,我觉得这样一个白痴,一行导致所有这些麻烦,谢谢 pherris还有 shaunak!
      猜你喜欢
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多