簡體   English   中英

類型安全性:未經檢查的從Object到T(Java)的轉換

[英]Type safety: Unchecked cast from Object to T (Java)

我正在用鍵T和值Long制作一個HashMap,而我的remove方法(從AbstractCollection類重寫)如下所示:

 public boolean remove(Object o) {
    if(denseBag.containsKey(o)){
        if(denseBag.get(o) == 1L){
            denseBag.remove(o);
        } else {
            Long removed = denseBag.get(o);
            T theO = (T) o;
            denseBag.replace(theO, removed, removed--); 
        }
    } else {
        return false;
    }

我收到消息:“類型安全:未經檢查的從Object到T的轉換”。 我只想確保它可以正常運行。 謝謝。

它會。 出於遺留原因,Java在Collections中使用Object o簽名。
如果仍然困擾您,請使用@SuppressWarnings("unchecked")

但是,您仍然會遇到很多其他麻煩。

這將被忽略: removed-- ,use --removed

據我所知,您的代碼將正常運行。 如果可以的話,建議您將方法的聲明更改為

public boolean remove(T o)

使用此功能,您不需要不需要檢查的強制轉換,這會使您的代碼更簡單一些。 如果您不能並且在我們說您的代碼正確時相信我們,請使用Alexey Soshin所說的@SuppressWarnings("unchecked") 並考慮將轉換因素分解為單獨的方法castToT(Object obj)或您希望調用的方法。 該標簽的優點是下次您從編譯器或IDE收到友好警告時,您知道它不僅是您一次選擇忽略的舊警告。

暫無
暫無

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

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