[英]Infering generic type without creating new instance
private HashMap<Object, Object> attribute = new HashMap<>();
public <T> T attributeAs(Object key, T as){
Object ans = attribute.get(key);
return ans == null ? null : (T) ans;
}
方法:
ModuleM m = (ModuleM) player.attribute.get("module_m");
除了該方法之外,還有什么方法可以在不創建新類實例的情況下返回類型,即:
ModuleM m = person.attributeAs("module_m", new ModuleM());
因為使用上述方法時,您正在創建一個全新的實例,並且如果ModuleM是包含大量數據的龐大類,那么這會影響處理能力/速度是否正確?
(記住我希望ModuleM不是Class <ModuleM>)
您不需要發送實例:
public <T> T attributeAs(Object key){
Object ans = attribute.get(key);
return (T) ans;
}
編譯器將根據調用的分配來推斷類型:
ModuleM attribute = person.attributeAs("module_m");
但是,當然,在實際實例與具體目標類型不兼容的情況下,由於地圖支持<Object, Object>
條目,因此您可能會獲得類強制轉換異常。 那是因為這樣的呼叫:
String attribute = person.attributeAs("lastName") //probably OK
要么
String attribute = person.attributeAs("module_m") //probably problematic
也將是合法的,但可能不兼容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.