3

オブジェクトをハッシュマップ値として配置するコードがあります。イテレータクラスを使用して、ハッシュマップから緯度と経度を読み取りたいです。しかし、これを行う方法がわかりません。ここに私のコードがあります。

Location locobj = new Location();
HashMap loc = new HashMap();

while(rs.next()){
      locobj.setLat(lat);
      locobj.setLng(lon);
      loc.put(location, locobj);

}

      Set set = loc.entrySet();
      Iterator i = set.iterator();
      while(i.hasNext()) {
      Map.Entry me = (Map.Entry)i.next();
      System.out.println(me.getKey()+"value>>"+me.getValue()); 
      }

教室の場所はこんな感じ

public class Location {

    private String lat;
    private String lng;
    private String name;

    public String getLat() {
        return lat;
    }
    public void setLat(String lat) {
        this.lat = lat;
    }
    public String getLng() {
        return lng;
    }
    public void setLng(String lng) {
        this.lng = lng;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

getValue() メソッドから locobj lat および lng 値を読み取るにはどうすればよいですか。助けてください

4

6 に答える 6

5

ここではジェネリックを使用する必要があります。マップを次のように宣言します

Map<String, Location> locationMap = new HashMap<>() // assuming your key is of string type

そうすれば、型キャストを避けることができます (RTTI は避けるべきです - 設計原則の 1 つです)。

Location locobj = me.getValue()
locobj.getLat() // will give you latitude
locobj.getLng() // will give you longitude
于 2013-01-01T13:53:55.633 に答える
4

値をキャストしないのはなぜですか?

Location locobj = (Location)me.getValue();
locobj.getLat();
locobj.getLng();
于 2013-01-01T13:40:28.907 に答える
1

Generics を使用するようにコードを変更します。

それ以外の

Location locobj = new Location();
Map<Location> loc = new HashMap<Location>(); // code to interfaces, and use Generics

行う

Location locobj = new Location();
HashMap<String,Location> loc = new HashMap<String,Location>();

そしてあなたのエントリ

Map.Entry<String,Location> me = (Map.Entry)i.next();

その後、何もキャストする必要はありません

于 2013-01-01T13:58:07.553 に答える
0

getKey() または getValue() を使用してオブジェクトを取得しています。getter メソッドを呼び出して、適切な値を出力する必要があります。

于 2013-01-01T13:51:53.187 に答える
0

getValue()は Object への参照を返しますが、実際には object は Location です。したがって、キャストを実行する必要があります。@DataNucleus からの回答を参照してください。ただし、次のようにすることもできます。

System.out.println(me.getKey()+"value>>"+((Location)me.getValue()).getLng()); 
于 2013-01-01T13:50:19.590 に答える