将对象添加到Apache commons池中的KeyedObjectPool <k,v> </k,v>

时间:2013-09-09 15:56:19

标签: java apache-commons

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

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

假设我想实现一个Keyed连接池,其中每个键引用一个连接:

例如:KeyObjectPool项

所以我的问题是如何添加新连接? 有什么像item.add(键,值)?

2 个答案:

答案 0 :(得分:2)

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

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

特别感兴趣的是从 Line 1058.

开始的方法

编辑:应该注意,不推荐使用setFactory()方法,所以你要避免使用它。

我认为您面临的基本问题是KeyedObjectPool旨在为您计算对象创建(或值),但希望专门定义您自己的对象(在本例中为连接配置)并将它们指定为值密钥。

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

如果不了解您所尝试的大局,我只能建议您重新考虑您的设计。

答案 1 :(得分:0)

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

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

例如。

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

您已创建了一个新的对象,该对象包含字符串和值也是字符串的键。

如果您尝试这样做:

kop.addObject("hello");
如果您尝试这样做,

将起作用:

kop.addObject(new POJO());

会失败。

非常简单。

(p.s.POJO是一个Plain Old java对象,例如你创建的任何类)