나는 RestHandler 매개 변수화 된 인터페이스가 있습니다.Java 일반 매개 변수화 된 클래스 : 바인딩되지 않은 와일드 카드 대 원시 형식
public interface RestHandler<T> {
blah blah blah...
}
그리고 Class.forName을 사용하여 config에서 클래스를 만들어야합니다. 이제는 세 가지 버전으로 나뉘어 모든 버전이 성공적으로 컴파일됩니다.
버전 1 :
@SuppressWarnings("unchecked")
public static <T> RestHandler<T> create(final String handlerImplFqcn) throws ClassNotFoundException,
IllegalAccessException,
InstantiationException {
Class<?> handlerClass = Class.forName(handlerImplFqcn);
return (RestHandler<T>) handlerClass.newInstance();
}
버전 2 :
public static RestHandler<?> create(final String handlerImplFqcn) throws ClassNotFoundException,
IllegalAccessException,
InstantiationException {
@SuppressWarnings("rawtypes")
Class handlerClass = Class.forName(handlerImplFqcn);
return (RestHandler<?>) handlerClass.newInstance();
}
버전 3 :
public static RestHandler<?> create(final String handlerImplFqcn) throws ClassNotFoundException,
IllegalAccessException,
InstantiationException {
Class<?> handlerClass = Class.forName(handlerImplFqcn);
return (RestHandler<?>) handlerClass.newInstance();
}
내 질문은, 왜 모든 일 어느 하나가 가장 좋은 방법이 될 것입니다?
내 개인적인 취향은, 첫 번째 예제입니다. 이 모든 예제에서 ClassCastException을 던질 수도 있습니다. – Dave