zoukankan      html  css  js  c++  java
  • Web 数据源

    问题描述:

     ClassCastException:类型转换异常

    问题代码:

        private static LinkedList<Connection> pool = (LinkedList<Connection>) Collections.synchronizedList(new LinkedList<Connection>());

    问题分析:

    点进去查看文档:
    
            public static <T> List<T> synchronizedList(List<T> list) {
            return (list instanceof RandomAccess ?
                    new SynchronizedRandomAccessList<>(list) :
                    new SynchronizedList<>(list));
                }
    
    Collections.synchronizedList()方法的返回值是List<T>,我们直接使用List<Connection>来接收方法的返回值,编译通过,运行无异常
    
    我们查看LinkenList是否实现了RandomAccess
    
        public class LinkedList<E>
            extends AbstractSequentialList<E>
            implements List<E>, Deque<E>, Cloneable, java.io.Serializable
    
    可以看到LinkedList并没有实现RandomAccess接口,所以,方法的返回值为SynchronizedList的实例
    
          static class SynchronizedList<E>
              extends SynchronizedCollection<E>
              implements List<E>
    
    我们可以看到,LinkedList和SynchronizedList之间并没有继承的关系,所以,无法进行强制类型转换

     问题总结:

    引用变量的强制类型转换:
        (type)variable:将variable变量转换成一个type类型的变量
                      或者将一个引用变量类型变量转换成其子类类型
    
        引用类型之间的转换只能在具有继承关系的两个类型之间进行,如果是两个没有任何继承关系的类型,则无法进行类型转换,否则编译时出现错误。如果试图把一个父类实例转换成子类类型,则这个对象必须实际上是子类实例才行(即编译时类型为父类类型,而运行时类型是子类类型),否则将在运行时引发ClassCastException异常
  • 相关阅读:
    免费申请域名
    分享学习linux网站
    二分法
    node 解决存储xss风险报告
    cf987f AND Graph
    loj2587 「APIO2018」铁人两项
    luogu3830 [SHOI2012]随机树
    luogu3343 [ZJOI2015]地震后的幻想乡
    bzoj2560 串珠子
    luogu3317 [SDOI2014]重建
  • 原文地址:https://www.cnblogs.com/roxy/p/7484576.html
Copyright © 2011-2022 走看看