作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个简短的对象持有者实用程序类。例如;
public ResponseAbc bringMeStuff(RequestAbc request){
ResponseAbc response = new ResponseAbc();
/* Setting request here.. */
response = bringMeLotsOfStuff(request);
/* Here I am calling the Util class */
Util.putToObjectHolder("myAbcResponse", response);
return response;
}
public void testMe(){
/* Testing objectHolder */
ResponseAbc newResponse = (ResponseAbc) Util.getFromObjectHolder("response");
}
这是 Util 类
public class Util<T> {
private static Util<?> instance = null;
private Map<String, T> objHolder;
private Util() {
}
/* I strongly think Util class should be singleton if I want to hold the map globally */
public static Util<?> getInstance() {
if (instance == null) {
instance = new Util();
}
return instance;
}
public static <T> void putToObjectHolder(String objectName, T objectType) {
// Map<String, T> holder = (Map<String, T>) getInstance().getObjHolder();
// holder.put(objectName, objectType);
getInstance().getObjHolder().put(objectName, objectType); //-> Argument error
}
public static <T> Object getFromObjectHolder(final String objectName) {
Map<String, T> holder = (Map<String, T>) getInstance().getObjHolder();
T obj = null;
for (Entry<String, T> entry : holder.entrySet()) {
if (entry.getKey().equals(objectName)) {
obj = entry.getValue();
} else {
obj = null;
}
}
return obj;
}
public Map<String, T> getObjHolder() {
if (objHolder == null) {
objHolder = new HashMap<String, T>();
}
return objHolder;
}
public void setObjHolder(Map<String, T> objHolder) {
this.objHolder = objHolder;
}
}
如果我取消注释 putToObjectHolder 方法,它会起作用,但我不太确定它应该以这种方式工作。我的意思是创建另一个 map 并分配给它应该可以解决问题。
我想做的是持有一个具有单个实例的静态 map 持有者,这样我就可以将我想要的任何对象命名为名称,并在我想要的时候获取该对象(如果它存在于该“全局持有者”中)。
PS:类型安全警告确实相当困惑,我也很想改进它,尽管我不知道如何改进。
提前致谢。
最佳答案
抛开单例部分,您是否尝试使用泛型将对象(不同类型)移入和移出同一个 Map,同时保持类型安全?也就是说,如果您将一个字符串(对于给定的键)放入映射中,那么只有在将其分配给(或用作)字符串时,取出该值才会编译。 (而且,代码中也没有强制转换。)
这是可以完成的,但是有点复杂,因为您需要定义具有相应值类型的键。
参见:Java map with values limited by key's type parameter
Joshua Block 在某处也有一篇关于此的好文章,但我似乎找不到它。
这似乎是您试图通过 put 方法实现的目标。不过,您将无法使用字符串作为键来完成此操作 - 您需要一个通用的键入键。
关于java - 如何在 Java 中使用泛型创建静态 'Object Holder' 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17976634/
我是一名优秀的程序员,十分优秀!