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

时间:2015-09-23 15:20:12

标签: java

代码优先:)

   /**
     *
     * @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??"); 
    }

我收到了这个警告:

  

未选中的作业:'java.lang.Class'为'java.lang.Class&lt;?   延伸drinks.Juice&gt;'

我将所有怪物代码放在randomArrayListJuiceClass()中以试图避免此类警告,但我仍然无法弄明白。我该怎么办?

我的目标只是在没有警告的情况下返回(某种)Juice类...我知道我只是在randomArrayListJuiceClass()提供Juice一些Exception,我只是扔了它一个 Opc.Da.Server server = null; static void readplc() { Opc.URL url = new Opc.URL("opcda://localhost/RSLinx OPC Server"); Opc.Da.Server server = null; OpcCom.Factory fact = new OpcCom.Factory(); **this.server = new Opc.Da.Server(fact, null);** .... } ,以防万一我变得邋and,并把它喂给别人。

我该怎么办?

1 个答案:

答案 0 :(得分:3)

获取随机元素的方法应该是通用的,并将其返回类型绑定到输入的类型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;

假设您的断言已启用,则不需要抛出其他异常。