簡體   English   中英

避免在未檢查的類強制轉換異常方面發出警告?

[英]Avoiding warnings on unchecked cast exceptions for classes?

代碼優先:)

   /**
     *
     * @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 <? 擴展飲料。果汁>

我將所有這些randomArrayListJuiceClass()代碼都放在randomArrayListJuiceClass()以嘗試避免此類警告,但是我仍然無法弄清楚。 我能做什么?

我的目標只是在沒有警告的情況下返回(某種) Juice類...我知道我只是在給JuicerandomArrayListJuiceClass() ,我只是拋出了一個Exception ,以防萬一我馬虎並喂了別的東西。

我該怎么辦?

您獲取隨機元素的方法應該是通用的,並將其返回類型綁定到輸入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;

假設您的斷言存在,您將不需要拋出另一個異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM