【发布时间】:2010-05-06 18:51:06
【问题描述】:
// 遗留代码
void setCacheValue(String name, Object value){
getServletContext().setAttribute(name, value);
}
Object getCacheValue(String name){
return getServletContext().getAttribute(name);
}
// 所以我想为“类型安全”使用泛型
// first, set method seems working perfectly
<T> void setCacheObject(String name, T value){
getServletContext().setAttribute(name, value);
}
//那么麻烦来了
<T> T getCacheValue(String name){
// of course, I cannot change servlet class - it returns Object type
Object value = getServletContext().getAttribute(name);
// would this work:
return (T) value;
// this cast is meaningless... but how should I do it?
}
// 这就是我在 clean 调用代码中要实现的目标:
{
double x = 1.2;
setCacheValue("x", x);
//...
// later
Double value = getCacheValue("x");
// too bad cannot use primitive type - it cannot handle null
}
那么,这样做的正确方法是什么?
【问题讨论】:
标签: java generics legacy type-safety