为什么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可以 展开
try{
String s=String.class.newInstance();
}catch(Exception e){}
str出错,s可以 展开
2个回答
展开全部
因为array.newinstance()方法是根据你传入的class进行反射生成对象,这意味着不但该方法可以生成string,还能生成其他类型。想到这个是不是马上就能想到,诶,为什么不能用泛型呢?如果考虑泛型Array.newinstance(class<T> clazz,int size)这种形式的话,我们以为可以解决。但是呢,class<T> 在编译时经过泛型擦除之后,实际上变成了class,丢失了类型信息,这样的话,我们实际上仍然不知道这是一个string的class,我们只能知道这是个class。于是,我们发现因为泛型擦除这一特性,我们不可能设计出基于泛型class对象的反射,这是java泛型的缺陷,种种原因导致了该方法不能生成具体的类型,于是我们只能无奈的让它保持obj啦,而下面那一种,你都知道是string下的方法了,也就是类型已经确定,当然就能生成具体类型啦~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询