おそらく、タイトルはひどく言い表されており、より良い知識を持つ人がそれを編集する可能性があります。ジェネリックパラメータをマップに送ることはできますか?
私はgsonを使用してJSONファイルを解析し、地図、TはEntity
というクラスにサブクラスであり、より具体的Map<String, T>
としてデータを返すメソッドparseFromJSONMap
を作成したいです。サブクラスのうちの2つは今までに定義されており、Creature
とHero
ですが、それ以上の場合があります。だから私は
parseFromJSONMap(file, Creature.class)
を呼び出す場合には、Map<String, Creature>
を返す必要がありますし、私は
それはMap<String, Hero>
などを返すべき
parseFromJSONMap(file, Hero.class)
を呼び出す場合、このメソッドは、今(それだけで作品のように見えるものです生物のため):
public static <T extends Entity> Map<String, T> parseFromJSONMap(File file, Class<T> clazz) throws FileNotFoundException
{
Type type = new TypeToken<HashMap<String, Creature>>(){}.getType();
return gson.fromJson(new FileReader(file), type);
}
したがって、の代わりに、T
を入れたい。私はそれを行うので、
Map<String, Creature> test = Entity.parseFromJSONMap(somefile, Creature.class);
のようにそれを呼び出すと、私はjava.lang.Object cannot be cast to heroes.model.Creature
取得私が可能欲しいものですか?
編集:test
のいずれかのメソッドを呼び出すと例外が発生します。たとえば、test.get("someCreature")
です。これは実行時例外です。
あなたが得たstacktraceを追加する価値があります – Matt
私が持っているものはすべて、 'Entity.parseFromJSONMap'を呼び出す' Creature'の一時的なmainメソッドなので、私が得る例外は私だけだと思います。 'main"スレッドの例外java.lang.ClassCastException:java.lang.Objectはheroes.model.Creature.main(heroes.model.Creature.main)にあるheroes.model.Creatureにキャストできません。 \tjava:131) ' –