gpt4 book ai didi

参数化类 : Unbounded Wildcards vs Raw Type 的 Java 泛型

转载 作者:行者123 更新时间:2023-11-30 08:57:04 24 4
gpt4 key购买 nike

我有一个参数化接口(interface) RestHandler。

public interface RestHandler<T> {
blah blah blah...
}

我需要使用 Class.forName 从配置中创建一个类。现在我想出了三个版本,它们都编译成功。

版本 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();
}

我的问题是,为什么它们都有效,哪一个是最佳实践?

最佳答案

版本 1,重写为:

public static <T extends RestHandler<?>> RestHandler<T> create(final String handlerImplFqcn) throws ClassNotFoundException, IllegalAccessException, InstantiationException, ClassCastException {
Class<T> handlerClass = (Class<T>) Class.forName(handlerImplFqcn);
return (RestHandler<T>) handlerClass.newInstance();
}

关于参数化类 : Unbounded Wildcards vs Raw Type 的 Java 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28319662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com