簡體   English   中英

Java編譯器為什么不將其標記為錯誤?

[英]Why doesn't the Java compiler flag this as an error?

我在Java Web應用程序中創建了一個枚舉類型,作為抽象一種將對象添加到會話屬性的過程的方式。 如果我嘗試將錯誤的對象類型映射到特定鍵,則會引發錯誤。 枚舉代​​碼如下所示:

public enum SessionVariables
{
CURRENT_BRIEF {

    @Override
    public <Briefable> void setValue(Briefable item)
    {
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(this.toString(), item);
    }

    @Override
    @SuppressWarnings("unchecked")
    public <Briefable> Briefable getValue()
    {
        return (Briefable) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(this.toString());
    }
};

public abstract <T> void setValue(T item);
public abstract <T> T getValue();
}

到目前為止一切正常,沒有編譯問題。

但是,如果我實際上嘗試使用錯誤類型的方法,則編譯器不會發現任何錯誤,例如:

SessionVariables.CURRENT_BRIEF.setValue("String value");

正常編譯。

任何想法為什么會這樣? 我錯過了什么嗎? 我在Windows 7計算機上使用Java SE 8,EE7。

CURRENT_BRIEF的聲明類型為SessionVariables 該類型具有方法<T> void setValue(T item)並且您的方法調用符合該簽名。

此外,當你寫

public <Briefable> void setValue(Briefable item)

您基本上重申了同一件事,只是將類型參數命名為Briefable 實際類型仍將從調用上下文中推斷出來,這意味着Briefable將該調用解析為String

暫無
暫無

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

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