为什么Array.newInstance()只能返回Object,不能返回确定数组类型?

String[]str=Array.newInstance(String.class,3);try{Strings=String.class.newInstance();... String[] str=Array.newInstance(String.class,3);
try{
String s=String.class.newInstance();
}catch(Exception e){}
str出错,s可以
展开
 我来答
你猜我猜哇擦猜
2015-06-02 · TA获得超过2.8万个赞
知道大有可为答主
回答量:2万
采纳率:0%
帮助的人:6815万
展开全部
你好。这是一个向上转型的用法
因为Object是一切类的父类,位于最高层。任何类型的对象都可以用Object来接收
看你这句代码,就是返回一个数组,所以用Object[] 数据来接收是毫无争议的。
北极咣太陽
2019-04-20
知道答主
回答量:1
采纳率:0%
帮助的人:758
展开全部
因为array.newinstance()方法是根据你传入的class进行反射生成对象,这意味着不但该方法可以生成string,还能生成其他类型。想到这个是不是马上就能想到,诶,为什么不能用泛型呢?如果考虑泛型Array.newinstance(class<T> clazz,int size)这种形式的话,我们以为可以解决。但是呢,class<T> 在编译时经过泛型擦除之后,实际上变成了class,丢失了类型信息,这样的话,我们实际上仍然不知道这是一个string的class,我们只能知道这是个class。于是,我们发现因为泛型擦除这一特性,我们不可能设计出基于泛型class对象的反射,这是java泛型的缺陷,种种原因导致了该方法不能生成具体的类型,于是我们只能无奈的让它保持obj啦,而下面那一种,你都知道是string下的方法了,也就是类型已经确定,当然就能生成具体类型啦~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式