2

在线提供的文档非常少。有谁知道如何向这个 KeyedPool 添加新的 K、V。addObject 有一个实体,但是怎么引用k,v呢?

问题的变化:[我发现的一个例子] http://www.javacodegeeks.com/2013/02/pool-of-ssh-connections-using-apache-keyedobjectpool.html

假设我想实现一个键控连接池,其中每个键都指一个连接:

例如:KeyObjectPool 项

所以我的问题是如何添加新的连接?有没有类似 item.add(key, value) 的东西?

4

3 回答 3

2

答案是你不能,因为你不应该这样做。KeyedObjectPool 的想法是池将使用工厂为您生成对象(值)。

有关示例实现,请查看 GenericKeyedObjectPool:

特别感兴趣的是从第 1058 行开始的方法。

编辑:应该注意 setFactory() 方法已被弃用,因此您要避免使用它。

我认为您面临的基本问题是 KeyedObjectPool 旨在为您确定对象创建(或值),但希望专门定义您自己的对象(在这种情况下为连接配置)并将它们作为值分配给键。

我认为您真正想要使用的是 Map,但也许您无法控制它并且正在使用已经围绕 KeyedObjectPool 构建的框架。如果是这种情况,您将面临更深层次的基本架构设计缺陷。

在不了解您正在尝试的大局的情况下,我只能建议您可能需要重新考虑您的设计。

于 2013-09-09T16:36:57.880 回答
0

在这种情况下,K 和 V 是通用的。
这意味着它们可以是任何东西。

你会告诉我,是的,但我怎么知道是 K 还是 V?
简单的!是你必须告诉班级那些字段应该是什么类型。

例如。

KeyedObjectPool<String,String> kop = new KeyedObjectPool<String,String>();

您已经创建了一个新对象,它处理作为字符串的键和值也是字符串。

如果你试试这个:

kop.addObject("hello");

将工作,如果你试试这个:

kop.addObject(new POJO());

将失败。

很简单。

(ps POJO 是一个普通的旧 java 对象,例如您创建的任何类)

于 2013-09-09T16:12:36.513 回答
0

将 KeyedPoolableObjectFactory 传递给构造函数中的 GenericKeyedObjectPool。KeyedPoolableObjectFactory 有一个方法

public Object makeObject(Object key) throws Exception {

您可以在其中根据密钥为池构造一个新值。

于 2015-04-22T11:42:58.943 回答