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