Java 将对象添加到KeyedObjectPool<;K、 V>;在apachecommons池中
关于这个在线的文档很少。有人知道如何向这个KeyedPool添加新的K,V吗。addObject有一个实体,但它是如何引用k,v的 对问题的修改: [我发现的一个例子] 假设我想要实现一个键控连接池,其中每个键都引用一个连接: 例如:KeyObjectPool项 那么,我的问题是,我该如何添加新的连接?Java 将对象添加到KeyedObjectPool<;K、 V>;在apachecommons池中,java,apache-commons,Java,Apache Commons,关于这个在线的文档很少。有人知道如何向这个KeyedPool添加新的K,V吗。addObject有一个实体,但它是如何引用k,v的 对问题的修改: [我发现的一个例子] 假设我想要实现一个键控连接池,其中每个键都引用一个连接: 例如:KeyObjectPool项 那么,我的问题是,我该如何添加新的连接? 是否有类似item.add(key,value)的内容?在这种情况下,K和V是通用的。 这意味着它们可以是任何东西 你会告诉我,是的,但我怎么知道K或V是 简单!您必须告诉类字段应该是什么类型
是否有类似item.add(key,value)的内容?在这种情况下,K和V是通用的。
这意味着它们可以是任何东西 你会告诉我,是的,但我怎么知道K或V是 简单!您必须告诉类字段应该是什么类型 比如说
KeyedObjectPool<String,String> kop = new KeyedObjectPool<String,String>();
如果您尝试以下方法,将起作用:
kop.addObject("hello");
kop.addObject(new POJO());
将失败
很简单
(p.s.POJO是一个普通的旧java对象,例如您创建的任何类)答案是您不能,因为您不应该这样做。KeyedObjectPool的思想是,该池将使用工厂为您生成对象(值)
对于示例实现,请查看GenericKeyedObjectPool:
在不了解更多您正在尝试的总体情况的情况下,我只能建议您重新考虑您的设计。将KeyedPoolableObjectFactory传递给构造函数中的GenericKeyedObjectPool。KeyedPoolableObjectFactory有一个方法
public Object makeObject(Object key) throws Exception {
在其中,您根据键为池构造一个新值。什么?我不知道你在问什么。你能试着重新表述这个问题吗,或者举个例子说明你想做什么?我已经更新了这个问题,请检查我是否同意这个问题。但是,您的示例中的“Hello”与它的值有何关联?假设我想添加到这个keyedobject池kop.addObject(“hello”),但是值是如何链接到它的?这取决于您使用的工厂类型,创建obj是工厂的职责,当您将密钥传递到池时,它会向工厂请求obj。工厂创建对象并将其返回到池中。或者是一本有趣而重要的读物。我不是obj池的向导。我认为,如果你想实现这样一个东西,你必须把你的想法弄清楚。这是否意味着每当我们执行addObject时,都会从Factory中创建一个新实例并将其放入池中?如果我们希望不同的密钥具有不同的连接配置,我们将如何工作?这取决于KeyedObjectPool的实现,通常是的。至于如何使不同的键具有不同的连接配置,除非您能够控制KeyedObjectPool的实现,或者可能控制KeyedPoolableObjectFactory的实现,否则您无法控制这些连接配置。我现在想知道为什么要使用KeyedObjectPool而不仅仅是HashMap。我将编辑我的答案以提供更多的想法。但是设计文档中说“一个键控池汇集了多种类型的实例。每种类型都可以使用任意键进行访问。”那么这里的多种类型是什么意思呢?我遗漏了什么吗?我不确定他们所说的“类型”是什么意思,不幸的是,他们的Javadoc在这一点上含糊不清,似乎不一致。我认为,如果说有什么问题的话,那就是javadocs遗漏了什么。