加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

关于Object数组强转成Integer数组的问题:Ljava.lang.Object; ca

发布时间:2020-12-14 06:14:08 所属栏目:Java 来源:网络整理
导读:代码如下: //数组强转报错演示 Object[] numbers = {1,2,3 = (Integer[])numbers; ?报错: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer; 原因: 根本原因还是类型的继承关系问题,Integer[]并不是Object[]的

代码如下:

//数组强转报错演示   Object[] numbers = {1,2,3= (Integer[])numbers;

?报错:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

原因:

  根本原因还是类型的继承关系问题,Integer[]并不是Object[]的子类。虽然,Integer继承自Object,但Integer[]的直接父类是Object。即所有数组类型的直接父类都是Object,可以通过反射来验证。数组类型是写在jvm里得,就像8种基本类型,我们无法在java的标准库中找到这个类。

//数组的直接父类演示 = {1,3= {1,3

输出结果:

解决方案,可以对数组每个成员分别转化:

= {1,3= ( i = 0;i=

当A被B继承时,A[]类型的引用可以指向B[]类型的实例.

    即:A[] a = new B[3]成立。

= {1,3="引用成功!!"

?控制台:

引用成功!!

这种情况被允许,是java的一个语法特性,这种语法特性的存在是为了方法中参数传递的方便。

在给数据库语句传递参数时,将多个参数传递给sql语句中的每一个占位符,可以使用Object[]类型的参数来接收,然后,在方法中遍历数组元素,根据不同类型,转化成相应的类型数据。

= {1,3= {"a","b","c"</span><span style="color: #0000ff"&gt;public</span> <span style="color: #0000ff"&gt;void</span><span style="color: #000000"&gt; traversalArray(Object[] o) { </span><span style="color: #0000ff"&gt;for</span>(<span style="color: #0000ff"&gt;int</span> i = 0;i<o.length;i++<span style="color: #000000"&gt;) { </span><span style="color: #0000ff"&gt;if</span>(o[i] <span style="color: #0000ff"&gt;instanceof</span><span style="color: #000000"&gt; Integer) { System.out.println(</span>"PreparedStatement添加int参数"<span style="color: #000000"&gt;); } </span><span style="color: #0000ff"&gt;if</span>(o[i] <span style="color: #0000ff"&gt;instanceof</span><span style="color: #000000"&gt; String) { System.out.println(</span>"PreparedStatement添加String参数"<span style="color: #000000"&gt;); } </span><span style="color: #0000ff"&gt;if</span>(o[i] <span style="color: #0000ff"&gt;instanceof</span><span style="color: #000000"&gt; java.util.Date) { System.out.println(</span>"PreparedStatement添加String参数"<span style="color: #000000"&gt;); } </span><span style="color: #0000ff"&gt;else</span><span style="color: #000000"&gt; { System.out.println(</span>"还有其他类型得意添加!"<span style="color: #000000"&gt;); } } }</span></pre>

如果没有这个特性:

  1、在方法中定义Object类型的参数,来接收数组参数,如果在代码内部进行类型转化,则有类型转化异常的风险,因为,Object是顶级父类,传递的参数可以不是个数组

Object obj = 1= (Object[]) obj;

  2、使用具体的数据类型数组,String[],Integer[],则会使类型的限制太过固定失去灵活性,每种类型都要新增一个方法来代替。

= {1,"c"</span><span style="color: #0000ff"&gt;public</span> <span style="color: #0000ff"&gt;void</span><span style="color: #000000"&gt; traversalIntegerArray(Integer[] arr) { </span><span style="color: #0000ff"&gt;for</span>(<span style="color: #0000ff"&gt;int</span> i = 0;i<arr.length;i++<span style="color: #000000"&gt;) { </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;给PreparedStatement添加参数</span>

<span style="color: #000000">     }
   }
   
  <span style="color: #0000ff">public <span style="color: #0000ff">void<span style="color: #000000"> traversalStringArray(String[] arr) {
<span style="color: #0000ff">for(<span style="color: #0000ff">int i = 0;i<arr.length;i++<span style="color: #000000">) {
<span style="color: #008000">//<span style="color: #008000">给PreparedStatement添加参数
<span style="color: #000000">     }
   }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读