일반 기본 클래스를 반환하는 팩터 리 메서드를 일반화하려고합니다. 그것은 작동하지만, 내가 받고있어 "BaseClass 원시 형식입니다 ..."경고.Java - Factory 제네릭 기본 형식을 반환하는 메서드
나는 일반적인 방법에 대한 자바 문서 인 을 읽었지만 여전히 이것을 달성하는 방법을 아직 알지 못했다.
클래스 # 1
//base abstract class
public abstract class BaseFormatter<T>
{
public abstract String formatValue(T value);
}
클래스 # 2
//two implementations of concrete classes
public class FooFormatter extends BaseFormatter<Integer>
{
@Override
public String formatValue(Integer value)
{
//return a formatted String
}
}
클래스 # 별도의 클래스에서 3
public class BarFormatter extends BaseFormatter<String>
{
@Override
public String formatValue(String value)
{
//return a formatted String
}
}
공장 방법
0 : 여기에 는 일부 코드입니다 코드BaseFormatter<Integer> formatter = getFormatter(someInteger);
formatter.formatValue(myIntegerToFormat);
문제는 getFormatter() 방법으로 다른 장소에서 공장 방법에이
public static BaseFormatter getFormatter(Integer unrelatedInteger)
{
if (FOO_FORMATTER.equals(unrelatedInteger))
return new FooFormatter();
else if (BAR_FORMATTER.equals(unrelatedInteger))
return new BarFormatter();
//else...
}
전화는 BaseFormatter 원시 형, 그것이 있음을 경고합니다. 나는 BaseFormatter와 같은 다양한 것을 시도했다 그 외 여러분. 물론 호출 메서드의 BaseFormatter에서와 같이 반환 형식을 일반 형식으로 설정합니다.
형식 지정자 유형은 클래스 유형을 기반으로하지 않습니다. 예 : 모든 정수는 값은 FooFormatter로 포맷됩니다. 정수 (또는 문자열 또는 목록)의 형식을 지정할 수있는 방법은 2-3 가지입니다. 그게 param unrelatedInteger가 대상입니다.
의견에 대해 미리 감사드립니다. getFormatter가 BaseFormatter에 정의되어있는 경우
간단한 대답 : 자바 유형 시스템은 안전하게 원하는 제약 조건을 표현할 수 없습니다. 즉,이 캐스트에 대한 경고를 제거 할 수 없습니다. – millimoose