欢迎来到天天文库
浏览记录
ID:40651259
大小:149.00 KB
页数:4页
时间:2019-08-05
《隐式和显示的创建类型实例》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、隐式和显示的创建类型实例。1.隐式建类型实例我们上一章节提到下面有问题的代码:?123456789101112packagecom.ray.ch11; publicclassTest{ publicvoidtest(Objectobject){// System.out.println(objectinstanceofT);//error// System.out.println(newT());//error// System.out.println(newT[10]);//erro
2、r System.out.println((T)object);//waring }}解决的方法就是下面的代码:?12345678910111213141516171819202122packagecom.ray.ch11; importjava.lang.reflect.Array; publicclassTest{ privateClasskind; publicTest(Classt){ kind=t; } publicvoidt
3、est(Objectobject){ System.out.println(kind.isInstance(object)); try{ System.out.println(kind.newInstance()); }catch(InstantiationExceptione){ e.printStackTrace(); }catch(IllegalAccessExceptione){ e.print
4、StackTrace(); } System.out.println(Array.newInstance(kind,10)); System.out.println((T)object);//waring232425 }}但是,表面上没有太大的问题,因为我们是基于这个类有默认的构造器,我们来看看下面的代码:?123456789101112131415161718192021222324packagecom.ray.ch11; publicclassTe
5、st{ privateClasskind; publicTest(Classt){ kind=t; } publicvoidtest(){ try{ System.out.println(kind.newInstance()); }catch(InstantiationExceptione){ e.printStackTrace(); }catch(IllegalAccessEx
6、ceptione){ e.printStackTrace(); } } publicstaticvoidmain(String[]args){ newTest(Integer.class).test(); }}输出:java.lang.InstantiationException:java.lang.Integeratjava.lang.Class.newInstance0(Class.jav
7、a:340)atjava.lang.Class.newInstance(Class.java:308)atcom.ray.ch11.Test.test(Test.java:12)atcom.ray.ch11.Test.main(Test.java:21)我们减少了一些代码,但是主体还留着,然后我们在里面放上Integer这个类,我们可以从输出那里看见,直接报错,原因是Integer没有默认的构造函数。由于上面出现的问题,因此我们推荐下面显示创建类型对象的方式。 2.显示的创建类型实例(1)利用工厂对象来约束实现?12345
8、67891011121314151617181920packagecom.ray.ch11; publicclassTest{ publicstaticvoidmain(String[]args){ newIntegerFactory().create(); }} in
此文档下载收益归作者所有