簡體   English   中英

如何應對類型擦除?

[英]How to cope with type erasure?

任務是您被要求在一家烘焙面包店及其不同子類並以精美盒子出售的公司執行安全審計。 在向客戶發布之前,所有盒子都經過精心設計的 NaiveQualityControl class 檢查。 最近發生了許多案例,其中面包店以外的東西(例如紙)被包裝在盒子中並逃脫了質量檢查。

簡單看一下 NaiveQualityControl 得出的結論是,為 NaiveQualityControl 提供裝滿紙的盒子非常容易,這將通過 QC,而您的任務就是證明這一點。 相關類代碼如下:

/* This class and its subclasses should pass quality check */
class Bakery {}


class Cake extends Bakery {}


/* But this should not */
class Paper {}

您需要將實現添加到 Violator.defraud() 方法,該方法將執行以下操作:

根據方法簽名創建框列表 將紙 object 放入列表中的至少一個框 生成的列表應通過 NaiveQualityControl 檢查

我試過以下

class Violator {

public static List<Box<? extends Bakery>> defraud() {
    List<Box<? extends Bakery>> lbc = new ArrayList<Box<? extends Bakery>>();
    Box<? extends Bakery> bb =lbc.get(0);
    Paper p = new Paper();
    bb.put(p);
    return lbc;
}

但是 bb.put(p) 行有編譯錯誤。 我也嘗試了 Bakery 或 Cake 變量,但也出現了編譯錯誤。 所以我很困惑。

我寫

public static List<Box<? extends Bakery>> defraud()   {
    List<Box<? extends Bakery>> lbc = new ArrayList<Box<? extends Bakery>>();
    Paper p = new Paper();
    try {
        Box box = Box.class.newInstance();

        box.put(p);
        lbc.add(box);
    }
    catch(IllegalAccessException iae){}
    catch(InstantiationException ie){}
    return lbc;
}

暫無
暫無

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

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