泛型与Class类

来源:互联网 发布:战舰世界 个人数据 编辑:程序博客网 时间:2024/06/07 00:29
1 使用Class<T>泛型可以避免强制类型转换2 String.class的类型实际上是Class<String>3 如果Class对应的类暂时未知,就用Class<?>
//不用泛型的demopublic class ObjectFactory {    public static Object getInstance(String name){        try {            Class cls = Class.forName(name);            return cls.newInstance();        } catch (ClassNotFoundException e) {            e.printStackTrace();            return null;        } catch (InstantiationException e) {            e.printStackTrace();            return null;        } catch (IllegalAccessException e) {            e.printStackTrace();            return null;        }    }}public class Test extends Activity {    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);    //需要强制类型转换        Date date = (Date) ObjectFactory.getInstance("java.util.Date");    }}
//使用泛型的demopublic class ObjectFactory2 {//注意泛型的写法,在方法中将返回类型Object变成<T> T    public static <T> T getInstance(Class<T> cls){        try {            return cls.newInstance();        } catch (InstantiationException e) {            e.printStackTrace();            return null;        } catch (IllegalAccessException e) {            e.printStackTrace();            return null;        }    }}public class Test extends Activity {    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //不需要强制转换        Date d  = ObjectFactory2.getInstance(Date.class);    }}
//ex:Array//使用Array类创建数组Object arr = Array.newInstance(String.class,10);//Array的newInstance()方法签名public static Object newInstance(Class<?> componentType,int... dimensions)//如果改成下面就可以使用泛型public static <T> T newInstance(Class<T> componentType,int length)
public class ArrayFactory {    public static <T> T[] newInstance(Class<T> componentType, int length){        return (T[]) Array.newInstance(componentType,length);    }}public class Test extends Activity {    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //一维        String[] strings = ArrayFactory.newInstance(String.class,5);        strings[0] = "疯狂java讲义";        //二维        int[][] ints = ArrayFactory.newInstance(int[].class,10);        ints[1] = new int[]{22,33};        Log.d("shj--","str "+strings[0]+" ints "+ints[1].toString());    }}
原创粉丝点击