저는 Java Generics를 처음 사용합니다. 그러나 저는 많은 요약 링크와 예제를 읽었습니다. 그러나 나는 가장 간단한 방법을 알 권리가 없다. 나는 somenoe가 도울 수 있기를 바란다 :Java Generics로 안전하지 않은 경고 경고를 피하는 방법
정의되지 않은 Object 하나를 다른 Object에 매핑하는 HashMap을 만들고 싶습니다. 두 객체 모두 String 또는 Integer 중 하나 일 수 있습니다.
그래서 내가 쓴 :private final HashMap<L, R> left2Right = new HashMap<L, R>();
Extractor<?> extLeft = Extractor.getInstance(0);
Extractor<?> extRight = Extractor.getInstance(1);
L leftVal = extLeft.extract(d, i);
R rightVal = extRight.extract(d, i);
this.left2Right.put(leftVal, rightVal);
지금까지 너무 좋아 ...하지만 추출기 - 객체를 구현하는 문제가있다. 그들은 공장 패턴에 의해 인스턴스화됩니다.
abstract class Extractor<E> {
abstract E extract(DTable source, int row);
static <E> Extractor<E> getInstance(int type) {
if(type == 0)
return new IntExtractor();
else
return new StringExtractor();
}
}
class IntExtractor extends Extractor<Integer> {
@Override
Integer extract(DTable source, int row) {
int value = 5;
return new Integer(value);
}
}
class StringExtractor extends Extractor<String> {
@Override
String extract(DTable source, int row) {
String retVal = "hello";
return retVal;
}
}
그것은 컴파일하지만 나는 내가 뭘 잘못 E.로 정수/문자열 캐스팅에 Unsave 캐스트 경고를 얻을 : 나는 다음과 같이했다 (simplyfied)? 나도 알아, 나는 단순히 경고를 억누를 수있다. 하지만 이것이 바로 Java generics의 장점이라고 생각했습니다. 'E'가 실제로 "..."어떤 유형인지는 알지 못하기 때문에이 캐스팅 저장을 할 수 없습니다 ...
아니면 기본적으로 잘못된 것을하고 있습니까?
참고 : 나는 첫 번째 대답에서 몇 가지 정보를 사용 후 나는 "새로운"질문에 내 코드를 편집 ...
난 당신이 모든 것을이 문제가 우리에게 말하고되지 않은 느낌이 할 ... – Bombe