Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法将java.lang.Object强制转换为java.nio.channels.SocketChannel_Java_Sockets_Casting_Socketchannel - Fatal编程技术网

无法将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()
来实现这一点。看看下面我的答案。