《隐式和显示的创建类型实例》由会员分享,可在线阅读,更多相关《隐式和显示的创建类型实例(4页珍藏版)》请在金锄头文库上搜索。
1、隐式和显示的创建类型实例。1.隐式建类型实例我们上一章节提到下面有问题的代码:?123456789101112package com.ray.ch11;public class Test public void test(Object object)/ System.out.println(object instanceof T);/error/ System.out.println(new T();/error/ System.out.println(new T10);/errorSystem.out.println(T)object );/waring解决的方法就是下面的代码:?12345
2、678910111213141516171819202122package com.ray.ch11;import java.lang.reflect.Array;public class Test private Class kind;public Test(Class t) kind = t;public void test(Object object) System.out.println(kind.isInstance(object);try System.out.println(kind.newInstance(); catch (InstantiationException e)
3、e.printStackTrace(); catch (IllegalAccessException e) e.printStackTrace();System.out.println(Array.newInstance(kind, 10);System.out.println(T) object);/ waring232425但是,表面上没有太大的问题,因为我们是基于这个类有默认的构造器,我们来看看下面的代码:?123456789101112131415161718192021222324package com.ray.ch11;public class Test private Class
4、 kind;public Test(Class t) kind = t;public void test() try System.out.println(kind.newInstance(); catch (InstantiationException e) e.printStackTrace(); catch (IllegalAccessException e) e.printStackTrace();public static void main(String args) new Test(Integer.class).test();输出:java.lang.InstantiationE
5、xception: java.lang.Integerat java.lang.Class.newInstance0(Class.java:340)at java.lang.Class.newInstance(Class.java:308)at com.ray.ch11.Test.test(Test.java:12)at com.ray.ch11.Test.main(Test.java:21)我们减少了一些代码,但是主体还留着,然后我们在里面放上 Integer 这个类,我们可以从输出那里看见,直接报错,原因是 Integer 没有默认的构造函数。由于上面出现的问题,因此我们推荐下面显示创建类
6、型对象的方式。2.显示的创建类型实例(1)利用工厂对象来约束实现?1234567891011121314151617181920package com.ray.ch11;public class Test public static void main(String args) new IntegerFactory().create();interface IFactory T create();class IntegerFactory implements IFactory Overridepublic Integer create() return new Integer(0);(2)通过
7、模版方法设计模式来约束实现?123456789package com.ray.ch11;public class Test public static void main(String args) new IntegerFactory().show();10111213141516171819202122232425262728293031abstract class AFactory public final T obj;public AFactory() obj = create();abstract public T create();class IntegerFactory extends AFactory Overridepublic Integer create() return new Integer(0);public void show() System.out.println(obj.getClass().getName();总结:这一章节主要讲述隐式创建类型实例隐含的问题,以及怎样通过 显示创建类型实例的解决方案。