나는 완전히 위풍 당김을 가지고 있으며, 여러분에게 무슨 일이 일어나고 있는지를 알기 위해 그 자세를 취합니다. java 범용 입력을 강제하지 못했습니다.
이
데이터 구조Map<String, Object> objectMap
는 지금 문자열 및 숫자 값을 저장하지만, 향후 더 많은 유형들을 저장할 수있다.
public <T> T get(String variable, T defaultValue) {
// returns either the object from the map, or the default if its not in the map.
Object value = getObject(variable, defaultValue);
logger.debug("default value is of type " + defaultValue.getClass().getName());
// Attempt to get around casting issue
if (value instanceof Number)
{
value = (Number) value;
}
T ret = (T) value;
logger.debug("Variable " + variable + " which is of type " + value.getClass().getName() + " and returning as " + ret.getClass().getName() + " (is number: " + (value instanceof Number) + ")");
return ret;
}
그리고 이것은 호출 코드 :
public int getFoo() { return this.<Integer>get("foo", 0); }
이 내가 로그에서 볼 수있는 출력 :
이것은 내가 그 값을 검색하기 위해 사용하고 기능입니다
default value is of type java.lang.Integer
Variable foo which is of type java.lang.Long and returning as java.lang.Long (is number: true)
실패 직전 :
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
내가 가장 걱정하는 점은 클래스을 사용하도록 클래스를 강제 설정하려고 시도 했음에도 불구하고 클래스 유형이 Long로 나타나는 것입니다.
나는 뭔가를 놓치고, Java generics의 개념을 위반하고 있습니까? 어떤 도움
처음에는'Map'을 사용해서는 안됩니다. 지도에는 하나의 특정 값 유형이 있어야하며 실제로 함께 코드를 혼합하는 것이 좋습니다. –
이 예외가 발생한 곳에서 더 많은 스택 추적을 보내주십시오. – MJM
지도에 넣은 모양은 어떻게 생겼습니까? –