gpt4 book ai didi

java - @SuppressWarnings( "unchecked") 使用通用通配符时

转载 作者:行者123 更新时间:2023-12-04 06:00:30 25 4
gpt4 key购买 nike

我正在尝试创建一个对象列表,这些对象是模型对象的扩展。实例是使用给定的 Class 对象创建的。

public class ModelFactory {
public static final List< ? extends Model > createList( final int pLength,
final Class< ? extends Model > pModelClass ) {
List< Model > models = new ArrayList< Model >( pLength );
try {
for ( int i = 0; i < pLength; i++ ) {
Model model = pModelClass.newInstance();
models.add( i, model );
}
} catch ( InstantiationException e ) {
} catch ( IllegalAccessException e ) {
}
return models;
}
}

当我尝试调用该方法时,一切正常。然而,我确实收到了一个警告,我现在将其压制。
    @SuppressWarnings( "unchecked" )
List< CarModel > list = ( List< CarModel > ) ModelFactory.createList(
4, CarModel.class );

你们中有人知道摆脱这个警告的解决方案吗?

最佳答案

您可以通过为类型命名来摆脱它,例如

public static final <T extends Model> List<T> createList( final int pLength,
final Class<T> pModelClass ) {
List< T > models = new ArrayList< T >( pLength );
...
}

T 时,这会变得有点乱。本身是通用的,但只要不是,这将为您提供额外的类型安全性。现在,您实际上并不能保证您返回的列表包含您放入的类型的对象(这就是您需要强制转换的原因)。

所以在你的代码中,第一个 ? extends Model第二个 ? extends Model不一样的类型 .根据经验, ?总是独一无二的。事实上,你的代码总是会返回 List<Model> ,独立于您通过的实际类(class)。

然后你应该能够像这样使用它:
List< CarModel > list = ModelFactory.createList( 4, CarModel.class );

请注意,我不仅摆脱了警告,还摆脱了 Actor 阵容。

关于java - @SuppressWarnings( "unchecked") 使用通用通配符时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8961891/

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