제목이 잘못되었거나 더 나은 지식을 가진 사람이 편집 할 수 있습니다.지도에 제네릭 매개 변수를 보낼 수 있습니까?
나는 T는 Entity
라는 클래스에 서브 클래스입니다보다 구체적 Map<String, T>
, GSON를 사용하여 JSON 파일을 구문 분석하고지도로 데이터를 반환하는 방법 parseFromJSONMap
을 만들려고합니다. 서브 클래스 중 두 개는 지금까지 정의되었으므로 Creature
및 Hero
이지만 나중에있을 수 있습니다. 내가
parseFromJSONMap(file, Creature.class)
를 호출하는 경우 그래서 그것은 Map<String, Creature>
를 반환해야 내가
parseFromJSONMap(file, Hero.class)
를 호출 할 경우 반환해야 Map<String, Hero>
등
이 방법은 지금처럼 (그것은 단지 작품 모습입니다 생물을위한) :
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);
}
대신에 Creature
, 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"예외 java.lang.ClassCastException : java.lang.Object는 heroes.model.Creature.main (heroes.model.Creature.main)에 heroes.model.Creature \t으로 캐스팅 할 수 없습니다.java : 131)' –