gpt4 book ai didi

java - 是否可以在没有条件语句的情况下创建具有相同父类的随机对象?

转载 作者:搜寻专家 更新时间:2023-11-01 02:41:14 25 4
gpt4 key购买 nike

例如,我有类A,A有子类B和C,我想随机创建A,B或C,我可以使用这样的条件语句:

A a;
switch(new java.util.Random(3).nextInt()){
case 0:
a=new A();
break;
case 1:
a=new B();
break;
case 2:
a=new C();
break;
}
a.doSomething();

但我想有一个更好维护的版本,易于添加新的子类,然后我尝试使用数组为每个类保存一个 .class 对象,但由于“类型不兼容”而无法编译:

Class[] array={A.class,B.class,C.class};
A a;
try{
a=array[new java.util.Random(array.length).nextInt()].newInstance();
}catch(Exception e){
}
a.doSomething();

有语法可以解决上面的问题吗?如果不是,是否有任何通用的方法或语法可以在没有 if-else 条件的情况下生成随机子对象?

最佳答案

您可以使用通配符来完成。当涉及泛型时,通常最好使用 List而不是数组。例如

List<Class<? extends Number>> list = Arrays.asList(Number.class, Double.class, Integer.class);
try {
Number a=list.get(new Random().nextInt(list.size())).newInstance();
}catch(Exception e){
}

这可以通过 Class<? extends Number>[] 来完成但是通用数组创建存在问题。

关于java - 是否可以在没有条件语句的情况下创建具有相同父类的随机对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32730653/

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