gpt4 book ai didi

java - 如何在 Java 中使用泛型创建静态 'Object Holder' 类

转载 作者:行者123 更新时间:2023-12-01 14:17:38 24 4
gpt4 key购买 nike

我正在尝试创建一个简短的对象持有者实用程序类。例如;

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com