13

Java要素にいくつかのデータが保存されており、それを特定の形式(JSONObject)で返す必要があります。私の実装は問題なく動作しますが、Eclipse からまだ警告メッセージが表示されます (バージョン: Juno Service Release 2):

"型の安全性: メソッド put(Object, Object) は生の型 HashMap に属します。ジェネリック型 HashMap への参照はパラメーター化する必要があります"

これは私のコードです:

public interface Element {...}

public abstract class AbstractElement implements Element {...}

public final class Way extends AbstractElement {...}

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

public class WayToJsonConverter{
    ...
    public JSONObject wayToJson(){
        JSONObject obj = new JSONObject();
        obj.put("id",way.getId());
        ...
        return obj;
    }
    ...
}

問題のある行は次のとおりです。obj.put("id",way.getId());

追加する以外にこの問題を解決する方法はあり@SuppressWarnings("unchecked")ますか?

4

7 に答える 7

15

あなたの JSONObject は何ですか? HashMap から継承していますか? その場合、警告はおそらく、JSONObject インスタンスを次のように宣言する必要があることを意味します。

JSONObject<String,Object> obj=new JSONObject<String,Object>();

更新: JSONObject の定義を見てください:

public class JSONObject extends HashMap

HashMap を拡張しますが、その定義が

public class JSONObject<K,V> extends HashMap<K,V>

それから私たちは書くことができます

JSONObject<String,Object> obj=new JSONObject<String,Object>();

put メソッドは警告を生成しなくなります

于 2013-05-07T09:24:40.970 に答える
2

別のライブラリに切り替えたり、このライブラリのコードを変更してジェネリックにすることができない場合、他の唯一のオプションは、このライブラリを使用してジェネリックを適切にサポートするラッパーを作成することです。

したがって、 を含み、 を拡張および実装し、 のすべてのメソッドの転送メソッドを含む独自のJSONObjectクラスを作成できます。org.json.simple.JSONObjectHashMap<String, Object>Map<String, Object>org.json.simple.JSONObject

このクラスを追加する必要はありますが@SuppressWarnings("unchecked")、このクラスに限定され、コードの残りの部分はすべて、一般的な警告や警告の抑制から解放される可能性があります。

于 2013-05-07T18:24:45.910 に答える