gpt4 book ai didi

java - 避免对类的未经检查的强制转换异常发出警告?

转载 作者:行者123 更新时间:2023-12-01 22:06:07 24 4
gpt4 key购买 nike

代码优先:)

   /**
*
* @param arrayList the ArrayList
* @return a random object from the ArrayList
*/
public static Object randomArrayListObject(ArrayList<?> arrayList) {

Random random = new Random();
int i = random.nextInt(arrayList.size());
assert i >= 0;
assert i < arrayList.size();
return arrayList.get(i);

}

public static Class<? extends Juice> randomArrayListJuiceClass(
ArrayList<Class<? extends Juice>> arrayList) {

final Object o = randomArrayListObject(arrayList);
assert Juice.class.isAssignableFrom((Class) o);
if (Juice.class.isAssignableFrom((Class) o)) {
@SuppressWarnings("unchecked")
Class c = (Class<? extends Juice>) o;
return c;
} else throw new RuntimeException("wtf? not a Juice Class??");
}

我收到此警告:

Unchecked assignment: 'java.lang.Class' to 'java.lang.Class<? extends drinks.Juice>'

我将所有这些怪物代码放入randomArrayListJuiceClass()中以尝试避免此类警告,但我仍然无法弄清楚。我能做什么?

我的目标只是返回(某种)Juice 类而不发出警告...我知道我只是提供 randomArrayListJuiceClass() 一些 Juice,我只是让它抛出一个Exception,以防万一我马虎了,给它喂了别的东西。

我应该做什么?

最佳答案

获取随机元素的方法应该是通用的,并将其返回类型绑定(bind)到输入ArrayList的类型

public static <T> T randomArrayListObject(ArrayList<T> arrayList) {

您的其他代码将变为

final Class<? extends Juice> o = randomArrayListObject(arrayList);
assert Juice.class.isAssignableFrom(o); // even this is kind of useless
return o;

假设您的断言已启用,您将不需要抛出另一个异常。

关于java - 避免对类的未经检查的强制转换异常发出警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32743482/

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