Java 泛型警告

來源:互聯網
上載者:User
N長時間沒來這了,沒想到連後台介面都換了。。。
廢話不說,進入正題!

系統架構:一棵"命令"樹,一棵"資料"樹,命令樹的根,即頂端元素是一個抽象類別或介面,對外提供一個 execute 方法,但是這個方法的傳回型別會因為命令的不同而不同,在這裡舉兩個個執行個體,以學生選課來說。
  命令一、學生選的課的列表 GetMyCourseCommand 命令的 execute() 方法應返回一個 List。
  命令二、是不是選了某一個課程 CourseIsSelectedCommand 命令的 execute() 方法返回一個 Boolean。
這樣的話,我的介面會定義成: public interface Comamnd<T>...{
     public T execute();
}

由於我不想讓用戶端知道自己到底調用了哪一個命令,於是寫一個工廠來生產 Command,由於是工廠,所以 getCommand() 方法將被設定成 static 的,很簡單,我犯不著每次想得到一個 Command 都建立一個 Factory 對象。
這樣,用戶端要做的,就是根據需求建立不同的 Data 對象,並將 data 對象傳入Factory 方法,剛才提及的 getCommand() 的完整定義是 public static Command getCommand(Data d);

至此,用戶端在處理上述例子時對應應該做的就是:
  例子一、        Data d = new GetMyCourseData(params...);
        Command<List> cmd = CommandFactory.getCommand(d);
        List<Course> list = cmd.execute();

  例子二、        Data d = new CourseIsSelectedData(params...);
        Command<Boolean> cmd = CommandFactory.getCommand(d);
        boolean isSelected = cmd.execute();

用戶端好像挺清晰的,但是 Java 的泛型卻提示了警告,在中間那行生產Command對象的代碼那。

試過N多方法,除了 new 一個工廠對象出來,並將 getCommand 改為成員方法外,都無法消除這個警告。當然,我也不確定這個做法是不是有點設計過度

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.