簡體   English   中英

推斷通用類型而不創建新實例

[英]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.

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