无法将java.lang.Object强制转换为java.nio.channels.SocketChannel
在我的应用程序中,我有以下代码:无法将java.lang.Object强制转换为java.nio.channels.SocketChannel,java,sockets,casting,socketchannel,Java,Sockets,Casting,Socketchannel,在我的应用程序中,我有以下代码: SamplePoolableObjectFactory factory = new SamplePoolableObjectFactory(); this.pool = new SampleObjectPool(factory); ..... SocketChannel channel = null; try { channel = (SocketChannel) this.pool.bo
SamplePoolableObjectFactory factory = new SamplePoolableObjectFactory();
this.pool = new SampleObjectPool(factory);
.....
SocketChannel channel = null;
try {
channel = (SocketChannel) this.pool.borrowObject();
....
}
我有一个错误:
Unable to borrow socket from pool java.lang.ClassCastException: java.lang.Object cannot be cast to java.nio.channels.SocketChannel
我的演员怎么了
public class SamplePoolableObjectFactory implements PoolableObjectFactory{
private final static Log log = LogFactory.getLog(SamplePoolableObjectFactory.class);
/* (non-Javadoc)
* @see org.apache.commons.pool.PoolableObjectFactory#activateObject(java.lang.Object)
*/
public void activateObject(Object obj) throws Exception {
log.debug("Activate object ..." + obj.hashCode());
}
/* (non-Javadoc)
* @see org.apache.commons.pool.PoolableObjectFactory#destroyObject(java.lang.Object)
*/
public void destroyObject(Object obj) throws Exception {
log.debug("Destroy object ..." + obj.hashCode());
obj = null;
}
/* (non-Javadoc)
* @see org.apache.commons.pool.PoolableObjectFactory#makeObject()
*/
public Object makeObject() throws Exception {
Object obj = new Object();
log.debug("Make object ..." + obj.hashCode());
return obj;
}
/* (non-Javadoc)
* @see org.apache.commons.pool.PoolableObjectFactory#passivateObject(java.lang.Object)
*/
public void passivateObject(Object obj) throws Exception {
log.debug("Passivate object ..." + obj.hashCode());
}
/* (non-Javadoc)
* @see org.apache.commons.pool.PoolableObjectFactory#validateObject(java.lang.Object)
*/
public boolean validateObject(Object obj) {
log.debug("Validate object ..." + obj.hashCode());
return false;
}
}
及
您的
公共对象makeObject()
创建一个对象。您正试图将其转换为SocketChannel
public Object makeObject() throws Exception {
SocketChannel obj = ... // create channel here
log.debug("Make object ..." + obj.hashCode());
return obj;
}
就像猫不是狗一样,对象
也不是袜子通道
,不管你怎么试着扔它们。你的公共对象makeObject()
创建了一个对象
。您正试图将其转换为SocketChannel
public Object makeObject() throws Exception {
SocketChannel obj = ... // create channel here
log.debug("Make object ..." + obj.hashCode());
return obj;
}
就像猫不是狗一样,物体
也不是SocketChannels
,不管你怎么想把它们扔出去
如您所见,在提供的PoolableObjectFactory
实例上调用了makeObject()
,因此您应该相应地实现此方法
现在只返回对象的一个实例
,当然不能将其强制转换为SocketChannel
public Object makeObject() throws Exception {
SocketChannel obj = ... // create channel here
log.debug("Make object ..." + obj.hashCode());
return obj;
}
下面是一篇文章的摘录
如您所见,在提供的PoolableObjectFactory
实例上调用了makeObject()
,因此您应该相应地实现此方法
现在只返回对象的一个实例
,当然不能将其强制转换为SocketChannel
public Object makeObject() throws Exception {
SocketChannel obj = ... // create channel here
log.debug("Make object ..." + obj.hashCode());
return obj;
}
你的演员阵容没有问题。你的对象工厂并没有返回SocketChannel
对象,而是正常的java.lang.object
s.@Kayaman我的工厂是这样的公共类SamplePoolableObjectFactory实现了PoolableObjectFactory
为什么它返回对象
s?那么SamplePoolableObjectFactory
做了什么?大概它只创建了对象
,而不是套接字通道…@JonSkeet我编辑我的帖子你的演员阵容没有问题。你的对象工厂并没有返回SocketChannel
对象,而是正常的java.lang.object
s.@Kayaman我的工厂是这样的公共类SamplePoolableObjectFactory实现了PoolableObjectFactory
为什么它返回对象
s?那么SamplePoolableObjectFactory
做了什么?大概它只创建对象
,而不是套接字通道…@JonSkeet我编辑我的帖子如何创建通用对象池
您可以通过在工厂中实现makeObject()
来实现这一点。请看我下面的答案。如何创建GenericObjectPool
您可以通过在工厂中实现makeObject()
来实现这一点。看看下面我的答案。