パラメータ化されたインターフェイス RestHandler があります。
public interface RestHandler<T> {
blah blah blah...
}
そして、Class.forName を使用して構成からクラスを作成する必要があります。今、すべてが正常にコンパイルされる 3 つのバージョンを考え出しました。
バージョン 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();
}
私の質問は、なぜそれらがすべて機能し、どれがベストプラクティスになるのでしょうか?