2
在抽象工廠模式中,我使用的是泛型。 我有擴展Serializable的BaseEntity接口,Employee類實現BaseEntity。 在抽象類我有這個getJavaObj方法泛型類型鑄造?
getJavaObj()
是取Long empId
的方法,並返回一個Map<String, ? extends BaseEntity>
public abstract Map<String, ? extends BaseEntity> getJavaObj(Long id);
使用泛型我試圖做到這一點在它給人的主類;
Map<String, Employee> emp = getJavaObj(empId);
它給這個錯誤類型安全:從Map<String,capture#1-of ? extends BaseEntity>
未經檢查的強制轉換爲地圖
當我做類型轉換這樣
Map<String, Employee> emp = (Map<String, Employee>)getJavaObj(empId);
它給出了這樣的警告
類型安全:未選中投自
Map<String,capture#1-of ? extends Serializable>
至 地圖 類型安全:未選中從Map<String,capture#1-of ? extends BaseEntity>
轉換爲 地圖
有沒有辦法避免類型轉換或解決警告甚至類型轉換後?由於我要返回的對象通過BaseEntity接口擴展到Serializable。
不能他們只是一個泛型類型ARG添加到方法,而不是類參數?正如'public abstract Map getJavaObj(Long id)'?或者我忘了一些關於泛型方法參數的重要內容? –
@TomG - 這也可以。我認爲T已經是一個類參數。發佈作爲答案,它可能會得到一個綠色的複選標記。 :) –
@TedHopp在抽象類中,它不允許按照你的建議。它提供了錯誤,並建議:多標記在該行 \t - 類型參數字符串是隱藏式 \t字符串 \t - 這種方法需要一個機構,而不是一個 \t分號 \t - 返回類型的方法缺少 \t - 令牌上的語法錯誤「擴展」,預期爲 –